基本的请求URL:
/person/{id} GET 得到id的person
/person POST 新增person
/person/{id} PUT 更新id的person
/person/{id} DELETE 删除id的person
源码地址:https://github.com/loveincode/ssm
1. 查询 GET
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
1 @RequestMapping(value = "/{id}", method = RequestMethod.GET)
2 public @ResponseBody String show(@PathVariable Integer id, HttpServletRequest request,
3 HttpServletResponse response) {
4 log.info("ENTER " + ToolsUtil.getMethodName());
5 ResultVO resultVO = new ResultVO();
6 Person person = new Person();
7 person = personService.findById(id);
8 if (person != null) {
9 resultVO.setSuccess(true);
10 resultVO.setData(person);
11 resultVO.setMessage("查询成功");
12 } else {
13 resultVO.setMessage("查询失败,没找到id=" + id + "的Person");
14 }
15 return resultVO.toString();
16 }
测试:
2. 新增 POST
@RequestMapping(method = RequestMethod.POST)
1 @RequestMapping(method = RequestMethod.POST)
2 public @ResponseBody String add(@ModelAttribute("person") Person person, HttpServletRequest request,
3 HttpServletResponse response) {
4 ResultVO resultVO = new ResultVO();
5 System.out.println(person.toString());
6 if (person.getName() != null) {
7 personService.add(person);
8 resultVO.setSuccess(true);
9 resultVO.setMessage("插入成功");
10 } else {
11 resultVO.setMessage("name为空,插入失败");
12 }
13 return resultVO.toString();
14 }
测试:
3. 更新 PUT
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
@ResponseBody
public String update(@PathVariable Integer id, @ModelAttribute("person") Person person, HttpServletRequest request,
HttpServletResponse response) {
ResultVO resultVO = new ResultVO();
Person oldperson = personService.findById(id);
if (oldperson != null) {
if (person.getName() != null) {
person.setId(oldperson.getId());
personService.update(person);
resultVO.setMessage("更新成功");
} else {
resultVO.setMessage("更新失败,name为空");
}
} else {
resultVO.setMessage("更新失败,不存在 id = " + id + "的Person");
}
return resultVO.toString();
}
测试:
4. 删除 DELETE
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
1 @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
2 @ResponseBody
3 public String delete(@PathVariable Integer id, HttpServletRequest request, HttpServletResponse response) {
4 ResultVO resultVO = new ResultVO();
5 Person person = new Person();
6 person = personService.findById(id);
7 if (person != null) {
8 resultVO.setSuccess(true);
9 personService.delete(id);
10 resultVO.setMessage("删除成功");
11 } else {
12 resultVO.setMessage("删除失败,不存在id = " + id + "的Person");
13 }
14 return resultVO.toString();
15 }
测试:
5. 问题
5.1 SpringMVC接收不了PUT、DELETE bodydata 解决方法
需要在web.xml中加上:
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
然后在请求PUT、DELETE的时候,使用POST请求,在body中加入_method 参数,参数为PUT或DELETE,即可完成对PUT、DELETE的处理。
例如:
strtus2 构建restful风格 https://www.ibm.com/developerworks/cn/java/j-lo-struts2rest/