开启Spring HiddenMethodFilter后仍提示PUT请求不支持的问题
排查步骤与解决方向
1. 检查表单提交核心配置
浏览器原生仅支持GET/POST请求,Spring的HiddenHttpMethodFilter依赖POST请求+特定隐藏字段实现请求方法转换,需确认:
- 表单
method属性必须设为post,不能直接写put - 表单内必须添加隐藏字段:
<input type="hidden" name="_method" value="PUT"/>,字段名_method严格大小写敏感 - 表单
action属性的路径,需与Controller中PUT映射的路径完全匹配(包括首尾斜杠、大小写)
2. 验证Controller请求映射
- 确认登录处理方法使用
@PutMapping注解,或@RequestMapping(method = RequestMethod.PUT),且映射路径与表单action完全一致 - 检查方法参数配置,比如是否误用
@RequestBody导致请求解析异常(虽报错为方法不支持,但参数错误可能间接引发问题)
3. 确认HiddenHttpMethodFilter生效状态
- 查看Spring启动日志,确认
HiddenHttpMethodFilter已加载(日志会有类似Mapping filter: 'hiddenHttpMethodFilter'的记录) - 若存在自定义配置类,检查是否覆盖了默认Filter注册,导致
spring.mvc.hiddenmethod.filter.enabled=true失效;可手动注册Filter:@Bean public HiddenHttpMethodFilter hiddenHttpMethodFilter() { return new HiddenHttpMethodFilter(); } - 检查Filter执行顺序:若有自定义Filter(如安全认证Filter),需确保
HiddenHttpMethodFilter在其之前执行,避免请求未完成方法转换就被拦截
4. 查看实际请求详情
- 打开浏览器开发者工具(F12),切换至Network标签,提交表单后查看请求:
- 确认浏览器实际发送的Request Method为
POST - 检查Form Data中是否包含
_method: PUT参数 - 若参数不存在,说明Thymeleaf模板渲染隐藏字段时出错,检查模板语法(如字段名拼写)
- 确认浏览器实际发送的Request Method为
5. 检查Spring版本与依赖
- 确保Spring Boot版本在2.2及以上(该版本后
spring.mvc.hiddenmethod.filter.enabled=true可直接启用Filter),旧版本需手动配置 - 确认
spring-web依赖正常引入,无版本冲突
内容的提问来源于stack exchange,提问作者Mrtijn
相关产品推荐
相关产品推荐

