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

Spring MVC中HiddenHttpMethodFilter不生效,@PatchMapping报405错误

解决Spring MVC中@PatchMapping返回405的问题

检查HiddenHttpMethodFilter的配置方式

不同Spring版本的配置逻辑不一样,别照搬旧教程的写法:

  • Spring Boot 2.x及以上:无需手动注册Filter,只需在配置文件开启开关即可,手动注册反而可能因顺序问题失效:
    spring.mvc.hiddenmethod.filter.enabled=true
    
  • 纯Spring MVC(非Boot):要在web.xml里注册Filter,且顺序要优先于其他业务Filter:
    <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>
    
    用Java配置的话,需在WebConfig类中声明Bean:
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Bean
        public HiddenHttpMethodFilter hiddenHttpMethodFilter() {
            return new HiddenHttpMethodFilter();
        }
    }
    

验证请求参数的正确性

虽然浏览器能看到隐藏字段,但要确认_method参数值是大写的PATCH——Thymeleaf的th:method="patch"会自动转大写,但可以通过浏览器开发者工具的Network标签,查看请求的Form Data里是否明确存在_method: PATCH。

核对控制器方法的映射规则

确保控制器的@PatchMapping路径和表单的action完全匹配,比如表单action="/user/1",控制器要写@PatchMapping("/user/{id}"),避免路径拼写偏差。同时检查方法参数绑定是否正常,比如路径变量、请求体的接收逻辑有没有问题。

排查Filter的执行顺序

如果项目里有其他Filter(如权限校验、编码处理Filter),HiddenHttpMethodFilter必须排在这些Filter之前执行,否则请求被其他Filter处理后,_method参数可能被提前消费或修改,导致无法完成请求方法转换。

直接测试PATCH请求

用Postman等工具直接发送PATCH请求到控制器路径,如果能正常响应,说明问题确实出在HiddenHttpMethodFilter的配置上;如果仍返回405,要检查控制器是否存在重复映射,或是Spring MVC配置中禁用了PATCH方法。


内容的提问来源于stack exchange,提问作者Yung Choppa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:44:58