You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf th:method="put"提交报405 POST方法不支持错误

问题根因

浏览器原生表单仅支持GET、POST两种提交方法,Thymeleaf的th:method="put"逻辑是:将表单实际提交方法设为POST,同时自动生成name="_method" value="put"的隐藏域传递真实请求方法。但Spring MVC默认未开启隐藏域方法转换的过滤器,不会读取这个_method参数做请求方法转换,只会按实际的POST请求匹配路由,找不到对应@PostMapping就会返回405错误。

正确使用@PutMapping的配置方式

不需要修改控制器的@PutMapping注解,按你使用的框架版本开启对应配置即可:

  • Spring Boot 2.x 版本:直接在配置文件开启隐藏方法过滤器开关
# application.yml 配置
spring:
  mvc:
    hiddenmethod:
      filter:
        enabled: true
# application.properties 配置
spring.mvc.hiddenmethod.filter.enabled=true
  • Spring Boot 3.x 版本:除开启上述配置外,若过滤器未自动注册,手动添加Bean注册即可
@Configuration
public class WebConfig {
    @Bean
    public HiddenHttpMethodFilter hiddenHttpMethodFilter() {
        return new HiddenHttpMethodFilter();
    }
}
  • 非Boot原生Spring MVC项目:在Web配置类或web.xml中手动注册HiddenHttpMethodFilter,确保该过滤器优先级高于请求处理逻辑,能优先读取_method参数完成请求方法转换。
注意事项

如果项目集成了Spring Security,需确认安全配置没有拦截、移除_method表单参数,部分自定义安全规则会默认过滤非白名单表单参数,导致方法转换逻辑失效。

配置完成后重启服务,提交表单时Spring会自动将携带_method=put的POST请求转换为PUT请求,即可正常匹配你写的@PutMapping("/{id}")接口。

内容的提问来源于stack exchange,提问作者Mehdi Rahimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 12:51:18