SpringBoot 请求方法转化无效
在尝试编写RestFul风格的应用时,后台需要接受PUT,DELETE请求方法。但是前端无法靠常规操作发送这两个方法,所以就需要SpringBoot进行请求方法的转换。
在观看视频时,发现只需要在前端编写代码即可,而后端无需进行操作。
<form method="post" id="delete_form">
<input th:type="hidden" name="_method" value="delete">
</form>
但实际上SpringBoot并不能将方法转换,猜测是版本问题。在查看了源码之后最终找到了问题。
原因
首先分析SpringBoot应该是自动配置了HiddenHttpMethodFilter
,所以去WebMvcAutoConfiguration中找:
@Bean
@ConditionalOnMissingBean({HiddenHttpMethodFilter.class})
@ConditionalOnProperty(
prefix = "spring.mvc.hiddenmethod.filter",
name = {"enabled"},
matchIfMissing = false
)
public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
return new OrderedHiddenHttpMethodFilter();
}
发现它加了两个条件判断,第一个是如果没有配置HiddenHttpMethodFilter
,第二个是根据配置文件中的是否有设置来判断是否注入。
然后我们在找到SpringBoot的默认配置的元数据中spring-configuration-metadata.json
发现:
{
"name": "spring.mvc.hiddenmethod.filter.enabled",
"type": "java.lang.Boolean",
"description": "Whether to enable Spring's HiddenHttpMethodFilter.",
"defaultValue": false
},
默认配置居然是false,说明HiddenHttpMethodFilter
默认是关闭的,使用需要在配置文件中进行配置。所以,在配置文件中加一行配置,即可解决问题。
spring.mvc.hiddenmethod.filter.enabled=true