1.什么是Rest风格?
在过去我们写url映射时,总是写getUser、deleteUser等等,如果遵守RestFull规范的话,我们可以都写成/user,通过不同的请求方式来确认用户请求的action,如DELETE方式请求的是删除用户的action, get方式代表获取用户信息等等。
2.如何开启Rest风格
首先我们这里开启的只是表单提交的rest,也就是说不通过ajax请求如何让后台通过模拟的请求方式来实现rest效果,注意如果是postman或者前后端分离这种请求过来就已经明确指明请求方式的话,那就不需要开启表单提交的Rest风格啦。
server:
port: 9072
spring:
mvc:
hiddenmethod:
filter:
enabled: true
2.1开启的原理
//源码位置:org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration中可开启如下
@Bean
@ConditionalOnMissingBean(HiddenHttpMethodFilter.class) //用户未配置HiddenHttpMethodFilter则该对象则呗注入
@ConditionalOnProperty(prefix = "spring.mvc.hiddenmethod.filter", name = "enabled", matchIfMissing = false) //spring.mvc.hiddenmethod.filter.enabled默认关闭
public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
return new OrderedHiddenHttpMethodFilter();
}
通过查看HiddenHttpMethodFilter源码可发现允许支持的请求方式分别为PUT、DELETE、PATCH,并且参数名要携带一个为_method的参数来声明当前请求的类型
3.如何使用?
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
测试REST风格;
<form action="/user" method="post">
<input name="_method" type="hidden" value="delete"/>
<input value="REST-DELETE 提交" type="submit"/>
</form>
<form action="/user" method="post">
<input name="_method" type="hidden" value="PUT"/>
<input value="REST-PUT 提交" type="submit"/>
</form>
</body>
</html>
3.如何自定义_method
自定义类实现WebMvcConfigurer接口并加上@Configuration注解,重写hiddenHttpMethodFilter函数如下
@Bean
public HiddenHttpMethodFilter hiddenHttpMethodFilter(){
HiddenHttpMethodFilter methodFilter = new HiddenHttpMethodFilter();
methodFilter.setMethodParam("_m");
return methodFilter;
}