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建议使用postgetdeleteput四种请求方式分别对资源进行增加、查询、删除、修改操作。

​ 在springmvc开发中,我们可以使用@RequestMapping注解定义Restful风格的支持,或者@PostMapping@GetMapping@DeleteMapping@PutMapping等注解。

​ 但是我们开发中一般使用postget请求方式。对于deleteput基本不会使用,因为这两种请求方式不安全。

问题点

​ 在Restful风格中,需要我们对删除和修改分别使用deleteput方式请求。如果我们使用了这两种请求方式,那么的确符合了Restful风格,但是存在风险。如果不使用我们设计的接口URL就不是Restful风格的。

解决方案

​ springmvc就是基于这个问题提供了解决方案。你可以使用post方式请求接口,但是web应用中可以配置过滤器来将请求方式转换。

好处

  • 接口调用者使用post这种安全的方式请求web应用提供的接口
  • web应用内部接口定义putdelete等方式请求,符合Restful风格规范
  • 接口调用者使用post请求到web应用使用putdelete请求方式接受的处理交给springmvc提供的过滤器

开发流程

  1. web.xml中配置过滤器org.springframework.web.filter.HiddenHttpMethodFilter(如果是spring-boot搭建的项目参考spring-boot对于Filter的配置就可以了)
  2. 对于putdelete请求的时候使用post方式请求,同时增加一个参数_method=delete,定义实际的请求方式

代码

web.xml配置文件

<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <!--拦截所有的请求-->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

java代码

/*
 * restful  delete方式  /demo/handle/15
 */
@RequestMapping(value = "/handle/{id}",method = {RequestMethod.DELETE})
public ModelAndView handleDelete(@PathVariable("id") Integer id) {
    Date date = new Date();
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("date",date);
    modelAndView.setViewName("success");
    return modelAndView;
}

请求url

post方式请求:http://localhost:8080/demo/handle/1?_method=delete

注意 对于请求方式的转换不要用get,要用post请求才可以转换

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值