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

使用@RequestMapping(DELETE)时遇405错误:GET方法不被支持

解决思路

我之前也碰到过一模一样的坑!明明指定了RequestMethod.DELETE却收到GET不支持的提示,大概率是请求实际没按DELETE方式发送,或者有其他配置细节没注意到,给你几个排查方向:

  • 先确认你发送的请求真的是DELETE方法:
    很多人习惯用浏览器地址栏直接访问接口,这默认是GET请求,肯定会触发405。你可以用Postman、curl这类工具来测试:

    curl -X DELETE http://your-server-ip:port/deletetest
    

    如果是前端调用,要确保请求方法明确设置为DELETE,比如用axios的话:

    axios.delete('/deletetest').then(res => { ... })
    
  • 排查是否存在路径冲突的映射:
    检查你的控制器类或者其他控制器里,有没有其他方法也映射到了/deletetest但用了GET方法?比如:

    @RequestMapping(value = "/deletetest", method = RequestMethod.GET)
    public String someGetMethod() { ... }
    

    不过这种情况如果有GET映射的话,请求GET不会返回405,反而会正常匹配。所以更可能是你误以为发的是DELETE,实际发送的是GET请求。

  • 如果是通过HTML表单提交,要开启HiddenHttpMethodFilter:
    HTML表单默认只支持GET和POST方法,如果想用表单提交DELETE请求,需要在表单里加一个隐藏域:

    <form action="/deletetest" method="POST">
      <input type="hidden" name="_method" value="DELETE">
      <button type="submit">删除</button>
    </form>
    

    同时要在Spring配置中开启HiddenHttpMethodFilter,它会把带有_method参数的POST请求转换成对应的DELETE方法。

  • 检查类级别和方法级别的@RequestMapping拼接是否正确:
    如果你的控制器类上有@RequestMapping("/api"),那方法的实际访问路径是/api/deletetest,而不是根路径的/deletetest。如果你访问的是错误的路径,Spring找不到对应的DELETE映射,容器可能会返回405错误。

  • 查看Spring MVC的调试日志:
    开启Spring MVC的DEBUG级别日志,你能看到请求的详细处理过程:比如请求方法是什么、匹配到了哪个控制器方法、有没有被拦截器处理。日志里会明确告诉你为什么返回405,这是最直接的排查方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:26:05