RESTful之HiddenHttpMethodFilter源码解析
由于浏览器只支持发送
get
和
post
方式的请求,那么该如何发送
put
和
delete
请求呢?
SpringMVC
提供了
HiddenHttpMethodFilter
帮助我们
将
POST
请求转换为
DELETE
或
PUT
请求
HiddenHttpMethodFilter
处理
put
和
delete
请求的条件:
a>
当前请求的请求方式必须为
post
b>
当前请求必须传输请求参数
_method
满足以上条件,
HiddenHttpMethodFilter
过滤器就会将当前请求的请求方式转换为请求参数
_method
的值,因此请求参数
_method
的值才是最终的请求方式
在
web.xml
中注册
HiddenHttpMethodFilter
<!--设置处理请求方式的过滤器-->
<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>
找到web.xml下面的HiddenHttpMethodFilter
打开HiddenHttpMethodFilter Ctrl+左健
HiddenHttpMethodFilter extends OncePerRequestFilter
Alt +7 打开类结构
打开methodParam
补:
派生注解
package com.atguigu.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* 查询所有的用户信息-->/user-->get
* 根据id查询用户信息-->/user/1-->get
* 添加用户信息-->/user-->post
* 修改用户信息-->/user-->put
* 删除用户信息-->/user/1-->delete
*
* 注意:浏览器目前只能发送get和post请求
* 若要发送put和delete请求,需要在web.xml中配置一个过滤器HiddenHttpMethodFilter
* 配置了过滤器之后,发送的请求要满足两个条件,才能将请求方式转换为put或delete
* 1、当前请求的请求方式必须为post
* 2、当前请求必须传输请求参数_method,_method的值才是最终的请求方式
*/
@Controller
public class TestRestController {
/*查询所有的用户信息*/
//@RequestMapping(value = "/user", method = RequestMethod.GET)
@GetMapping("/user")
public String getAllUser(){
System.out.println("查询所有的用户信息-->/user-->get");
return "success";
}
/*根据id查询用户信息*/
//@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
@GetMapping("/user/{id}")
public String getUserById(@PathVariable("id") Integer id){
System.out.println("根据id查询用户信息-->/user/"+id+"-->get");
return "success";
}
/*添加用户信息*/
//@RequestMapping(value = "/user", method = RequestMethod.POST)
@PostMapping("/user")
public String insertUser(){
System.out.println("添加用户信息-->/user-->post");
return "success";
}
/*修改用户信息*/
//@RequestMapping(value = "/user", method = RequestMethod.PUT)
@PutMapping("/user")
public String updateUser(){
System.out.println("修改用户信息-->/user-->put");
return "success";
}
/*删除用户信息*/
//@RequestMapping(value = "/user/{id}", method = RequestMethod.DELETE)
@DeleteMapping("/user/{id}")
public String deleteUser(@PathVariable("id") Integer id){
System.out.println("删除用户信息-->/user/"+id+"-->delete");
return "success";
}
}