SpringMVC 中 Http 请求方式转换(post 转换为 put/delete 等方式)
springmvc 的请求方式支持
在 springmvc 中,提供了@RequestMapping注解帮助我们快速配置一个 handler 处理器。同时提供了method属性支持定义请求方式。如:@RequestMapping(value = "/handle",method = {RequestMethod.POST})。该 url:/handle 只支持 post 的请求方式。
springmvc 对 Restful 风格的支持
我们都知道 springmvc 已经对 Restful 风格的 url 提供了支持,Restful 建议使用post、get、delete、put四种请求方式分别对资源进行增加、查询、删除、修改操作。
在 springmvc 开发中,我们可以使用@RequestMapping注解定义 Restful 风格的支持,或者@PostMapping、@GetMapping、@DeleteMapping、@PutMapping等注解。
但是我们开发中一般使用post和get请求方式。对于delete和put基本不会使用,因为这两种请求方式不安全。
问题点
在 Restful 风格中,需要我们对删除和修改分别使用delete、put方式请求。如果我们使用了这两种请求方式,那么的确符合了 Restful 风格,但是存在风险。如果不使用我们设计的接口 URL 就不是 Restful 风格的。
解决方案
springmvc 就是基于这个问题提供了解决方案。你可以使用post方式请求接口,但是 web 应用中可以配置过滤器来将请求方式转换。
好处
接口调用者使用
post这种安全的方式请求 web 应用提供的接口web 应用内部接口定义
put、delete等方式请求,符合 Restful 风格规范接口调用者使用
post请求到 web 应用使用put、delete请求方式接受的处理交给 springmvc 提供的过滤器
开发流程
web.xml 中配置过滤器
org.springframework.web.filter.HiddenHttpMethodFilter(如果是 spring-boot 搭建的项目参考 spring-boot 对于 Filter 的配置就可以了)对于
put、delete请求的时候使用post方式请求,同时增加一个参数_method=delete,定义实际的请求方式
代码
web.xml 配置文件
java 代码
请求 url
post 方式请求:http://localhost:8080/demo/handle/1?_method=delete
注意 对于请求方式的转换不要用 get,要用 post 请求才可以转换
版权声明: 本文为 InfoQ 作者【知春秋】的原创文章。
原文链接:【http://xie.infoq.cn/article/4d1b81337c5f2caaaa999ecd5】。文章转载请联系作者。











评论