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

Spring MVC中Thymeleaf用PATCH方法报错:POST方法不被支持

问题排查与解决方案

针对你遇到的Method 'POST' is not supported错误,按以下步骤排查解决:

1. 检查控制器路径映射是否匹配

你的控制器方法@PatchMapping("/{id}")如果没有在类上添加@RequestMapping("/people"),实际匹配的路径是/{id},但表单提交的路径是/people/{id},两者不匹配。Spring找不到对应PATCH方法的处理器,就会把原本被过滤器转换前的POST请求当成无效请求,抛出错误。

解决:
在控制器类上添加@RequestMapping("/people"),确保方法的路径最终为/people/{id},和表单的th:action一致。

2. 调整HiddenHttpMethodFilter的注册顺序

你当前的代码是先调用super.onStartup(aServletContext)初始化DispatcherServlet,再注册过滤器,这会导致过滤器在DispatcherServlet之后执行,请求已经被处理,无法完成HTTP方法转换。

修改MySpringMvcDispatcherServletInitializer的代码:

@Override
public void onStartup(ServletContext aServletContext) throws ServletException {
    // 先注册过滤器,再初始化DispatcherServlet,确保过滤器先执行
    registerHiddenFieldFilter(aServletContext);
    super.onStartup(aServletContext);
}

private void registerHiddenFieldFilter(ServletContext aContext) {
    FilterRegistration.Dynamic filter = aContext.addFilter("hiddenHttpMethodFilter", new HiddenHttpMethodFilter());
    filter.addMappingForUrlPatterns(null, true, "/*");
    filter.setAsyncSupported(true);
}

3. 确认Thymeleaf是否生成了_method隐藏字段

Thymeleaf的th:method="PATCH"应该自动生成<input type="hidden" name="_method" value="PATCH"/>,如果没有生成,过滤器无法识别要转换的方法。

检查方式:
打开浏览器的开发者工具,查看edit页面的HTML源码,确认是否存在该隐藏字段。如果没有,说明Thymeleaf版本不兼容Spring 6(Jakarta环境),需要升级Thymeleaf到3.1+版本:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring6</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

4. 确保依赖版本适配Jakarta环境

  • 确认使用Spring 6+版本(适配Jakarta Servlet 6.0),比如spring-webmvc依赖:
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>6.0.11</version>
</dependency>
  • 避免混合javax和jakarta的依赖,确保所有Servlet相关依赖都是Jakarta版本。

内容的提问来源于stack exchange,提问作者Sabir Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:20:42