---恢复内容开始---
1 什么是restfull风格
http协议支持4种请求提交的方式:
get
post
put
delete
如果网络url请求资源也是以上述4种方式进行提交,并约定对4种请求方式默认进行以下的操作:
get:查询操作
post:新增操作
put:更新操作
delete:删除操作
并且,url参数的提交不再以?key=value的方式,而是以/user/id这种方式提交,就是符合restfull风格的编程风格。
2 默认form表单不支持put和delete提交方式的处理
1、在web.xml中配置一个过滤器
<!-- 配置HiddenHttpMethodFilter:可以把POST请求转为DELETE或POST请求 --> <filter> <filter-name>HiddenHttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class> </filter> <filter-mapping>
|
2、在提交的表单中,以一个隐藏域来提交一个name为 _method 值为 put或者delete的表单元素,以便上面的过滤器能处理这种请求
<form action="${ctx}/rest/user/1004" method="post"> <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="delete提交-->删除id为1004的用户"/> </form> |
3、控制器的处理器方法,注解映射中指定提交的方式为 put 或者 delete
@RequestMapping(value = "/user/{id}" ,method = RequestMethod.PUT) public String put(@PathVariable("id") Integer id){ logger.debug("Restfull风格的根据put更新用户:--->id="+id); return "redirect:/rest/restfull"; } |
4、返回的逻辑视图名的时候,如果发起ajax请求,则需要在上面处理器方法中添加@responseBody注解就可以了
@ResponseBody @RequestMapping(value = "/user/{id}" ,method = RequestMethod.DELETE) public String delete(@PathVariable("id") Integer id){ logger.debug("Restfull风格的根据delete删除:--->id="+id); return "restfull"; } |
5、返回的逻辑视图名的时候,如果是请求转发到原来发起请求的页面,这个时候,由于form表单不支持put和delete提交方式,则会出错,解决方案是,将请求重定向到一个另一个控制器进行处理,该处理方法由于重定向方式采取的是get方式,从而就能避免上面的错误
返回的视图是一个重定向:
@RequestMapping(value = "/user/{id}" ,method = RequestMethod.PUT) public String put(@PathVariable("id") Integer id){ logger.debug("Restfull风格的根据put更新用户:--->id="+id); return "redirect:/rest/restfull"; }
|
写一个处理器方法
@RequestMapping(value = "/restfull",method = RequestMethod.GET) public String goToRestfullJsp(){ return "restfull"; } |
---恢复内容结束---