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

Spring Boot使用@PutMapping/@DeleteMapping仍报405 GET不支持问题

405 请求方法不支持问题解决方案

核心原因

你遇到的报错是因为发起请求的方法和后端接口允许的方法不匹配,具体有以下几点问题和对应解决方式:

1. 直接地址栏访问的请求方式错误

浏览器地址栏手动输入地址访问时,默认只会发起GET请求,而你晋升用户的接口用了@PutMapping(仅支持PUT请求),删除接口用了@DeleteMapping(仅支持DELETE请求),自然会触发405错误。
如果要测试非GET接口,可以用Postman、Apifox等接口测试工具,手动指定请求方法为PUT/DELETE调用。

2. HTML原生表单不支持PUT/DELETE请求

如果你是通过页面表单触发操作,原生HTML表单只支持GET和POST两种方法,要适配PUT/DELETE请求需要做如下配置:

  • Spring Boot 2.2+版本默认已经自动开启HiddenHttpMethodFilter,直接在表单中添加隐藏域即可:
    <!-- 晋升用户的表单示例 -->
    <form method="post" th:action="@{/Admin/users/{name}(name=${user.username})}">
      <!-- 隐藏域指定真实请求方法 -->
      <input type="hidden" name="_method" value="put">
      <input type="hidden" name="role" value="ADMIN">
      <button type="submit">晋升为管理员</button>
    </form>
    
  • 如果是AJAX调用,直接指定请求方法为PUT/DELETE即可,不需要额外配置。

3. 现有接口代码存在参数绑定错误

你写的promoteUser方法没有正确接收路径参数,修正后的代码如下:

@PutMapping("/users/{username}")
// 加@PathVariable接收路径上的用户名,加@ResponseBody直接返回字符串不走视图解析
@ResponseBody
public String promoteUser(@PathVariable String username, User newUser){
      User user = userService.findUserByUserName(username);
      user.setRole(newUser.getRole());
      return "Promotion confirmed";
}

如果你的接口都是操作类接口不需要返回页面,建议直接把类上的@Controller改成@RestController,就不需要每个方法单独加@ResponseBody了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:09:03