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】。文章转载请联系作者。
评论