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

SpringBoot Rest接口调用遇301跳转及curl错误求助

问题排查与解决

我帮你梳理下两个核心问题,一个是curl命令的格式错误,另一个是Spring接口参数绑定的问题,这两个共同导致了你看到的异常:

1. curl命令格式错误(直接触发报错的原因)

你的curl命令里,-d后的JSON数据既没有用引号整体包裹,还使用了中文引号(比如”Pere”里的引号是中文格式),这会让shell错误地把JSON拆分成多个独立参数,进而触发Port number ended with 'R'这类解析错误,甚至因为@符号的特殊含义,导致意外的301跳转指向gmail地址。

修正后的curl命令:

curl -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eyJhbGciOiJIazUxMiJ9.eyJzdWIiOiJyaWNhcmQub2xsZUBnbWFpbC5jb20iLCJleHAiOjE1MjgxMTM3NTIsImlhdCI6MTUyNzUwODk1Mn0.QdxabtU1U87pYvyTstT1EG3E6uVpLo2mXCF0FF8iD6acKoAXKl_A0-eV_GrpOFg5FF1qR6B7llI5_USJL85YTQ" \
  -d '{"id":1,"username":"pere.peris@gmail.com","email":"pere.peris@gmail.com","firstName":"Pere","lastName":"PERIS","country":"CAT","enabled":true}' \
  "http://127.0.0.1:2233/elcor/api/users/1"
  • 用单引号'包裹整个JSON内容,避免shell解析里面的特殊字符(比如@、空格)
  • 把所有中文引号替换成标准英文双引号"

2. Spring接口参数绑定问题

就算curl命令修正了,你的接口也无法正确接收JSON请求体——因为你没有给User user参数添加@RequestBody注解。Spring默认会把无注解的参数当成URL请求参数绑定,而不是从请求体的JSON中解析。

修正后的接口代码:

@PutMapping(path = "api/users/{id}", consumes = "application/json", produces = "application/json")
public ResponseEntity<User> updateUser (HttpServletRequest request, @PathVariable long id, @RequestBody User user) {
    System.out.println(user);
    saveUser(user);
    return ResponseEntity.ok(user);
}
  • 添加@RequestBody注解,告诉Spring从请求体的JSON中反序列化生成User对象
  • 额外提醒:确认你的User类有无参构造函数和完整的getter/setter方法,否则Jackson无法正常解析JSON

额外检查点

  • 确认嵌入式Tomcat的运行端口确实是2233,避免URL端口匹配错误
  • 检查saveUser(user)方法是否正确关联了路径变量id(比如确保是更新指定id的用户,而非新增)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:18:24