10.5.2 开发Spring MVC控制器

10.5.2 开发Spring MVC控制器

本例的Spring MVC控制器会采用注解的方式工作,因此只要为这些控制器、控制器方法增加相应的注解修饰,这些控制器即可对外暴露JSON接口。下面是本例的Spring MVC控制器代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package org.crazyit.auction.controller;

import java.util.List;
import javax.servlet.http.HttpSession;
import org.crazyit.auction.business.ItemBean;
import org.crazyit.auction.domain.Bid;
import org.crazyit.auction.domain.Item;
import org.crazyit.auction.domain.Kind;
import org.crazyit.auction.service.AuctionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@RequestMapping("/auction")
public class AuctionController
{
// 该前端处理类所依赖的业务逻辑组件
@Autowired
private AuctionService auctionService;

// 通过赢取者获取物品的方法
@GetMapping("/getItemByWiner")
@ResponseBody
public Object getItemByWiner(HttpSession sess) throws Exception
{
// 从HttpSession中取出userId属性
Integer winerId = (Integer) sess.getAttribute("userId");
List<ItemBean> itembeans = auctionService.getItemByWiner(winerId);
return itembeans;
}

// 获取所有流拍物品的方法
@GetMapping("/getFailItems")
@ResponseBody
public Object getFailItems() throws Exception
{
return auctionService.getFailItems();
}

// 处理用户登录的方法
@PostMapping(value = "/loginAjax")
@ResponseBody
public Object validLogin(String loginUser, String loginPass, String vercode,
HttpSession sess) throws Exception
{
String rand = (String) sess.getAttribute("rand");
if (rand != null && !rand.equalsIgnoreCase(vercode))
{
return "-2";
}
int result = auctionService.validLogin(loginUser, loginPass);
if (result > 0)
{
sess.setAttribute("userId", result);
return "1";
}
return "-1";
}

// 获取用户竞价的方法
@GetMapping("/getBidByUser")
@ResponseBody
public Object getBidByUser(HttpSession sess) throws Exception
{
// 从HttpSession中取出userId属性
Integer userId = (Integer) sess.getAttribute("userId");
return auctionService.getBidByUser(userId);
}

@GetMapping("/getItemsByOwner")
@ResponseBody
// 根据属主获取物品的方法
public Object getItemsByOwner(HttpSession sess) throws Exception
{
// 从HttpSession中取出userId属性
Integer userId = (Integer) sess.getAttribute("userId");
return auctionService.getItemsByOwner(userId);
}

// 获取所有物品种类的方法
@GetMapping("/getAllKind")
@ResponseBody
public Object getAllKind() throws Exception
{
return auctionService.getAllKind();
}

// 添加物品的方法
@PostMapping("/addItem")
@ResponseBody
public Object addItem(String name, String desc, String remark,
double initPrice, int avail, int kind, HttpSession sess)
throws Exception
{
// 从HttpSession中取出userId属性
Integer userId = (Integer) sess.getAttribute("userId");
Item item = new Item();
item.setItemName(name);
item.setItemDesc(desc);
item.setItemRemark(remark);
item.setInitPrice(initPrice);
int rowNum = auctionService.addItem(item, avail, kind, userId);
return rowNum > 0 ? "success" : "error";
}

// 添加种类的方法
@PostMapping("/addKind")
@ResponseBody
public Object addKind(String name, String desc) throws Exception
{
Kind kind = new Kind();
kind.setKindName(name);
kind.setKindDesc(desc);
int rowNum = auctionService.addKind(kind);
return rowNum > 0 ? "success" : "error";
}

// 根据种类获取物品的方法
@PostMapping("/getItemsByKind")
@ResponseBody
public Object getItemsByKind(int kindId) throws Exception
{
return auctionService.getItemsByKind(kindId);
}
// 添加竞价记录的方法
@PostMapping("/addBid")
@ResponseBody
public Object addBid(int itemId, double bidPrice, HttpSession sess)
throws Exception
{
Integer userId = (Integer) sess.getAttribute("userId");
Bid bid = new Bid();
bid.setBidPrice(bidPrice);
int id = auctionService.addBid(itemId, bid, userId);
return id > 0 ? "success" : "error";
}
}

在该代码中先定义了一个AuctionController 类,并使用@RequestMapping("/auction")修饰该类,这意味着该控制器内的所有处理方法都位于/auction命名空间下。比如getItemByWiner()方法使用了@GetMapping("/getItemByWiner")修饰,这意味着该处理方法对应的URL/auction/getItemByWiner