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

Angular发送JSON的PUT请求在Spring Boot中无法接收的问题排查

问题分析与解决方案

你的PUT请求中后端无法获取请求体数据的核心原因是Spring Boot控制器方法没有标记请求体绑定注解,另外还有几个细节需要同步调整,以下是具体修复步骤:

1. 核心修复:添加@RequestBody注解

Spring Boot默认不会自动将HTTP请求体的JSON数据绑定到方法参数上,必须在参数前添加@RequestBody注解,告诉框架要把请求体映射到这个对象中:

@RequestMapping(value = "/udateJsonData", method = RequestMethod.PUT)
@Consumes(MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody boolean udateJsonData(@RequestBody RequestBody requestBody) {
  System.out.println(requestBody.title);
  return false;
}

2. 修正模型类的属性访问权限

你的RequestBody类属性是包私有访问权限,Jackson(Spring默认的JSON处理框架)可能无法正常读取/写入这些属性。建议改为private并添加getter/setter方法,确保序列化正常:

@XmlRootElement
public class RequestBody {
  @JsonProperty 
  private int id;
  @JsonProperty 
  private String title;
  @JsonProperty 
  private boolean completed;

  // 生成对应的getter和setter方法
  public int getId() { return id; }
  public void setId(int id) { this.id = id; }
  public String getTitle() { return title; }
  public void setTitle(String title) { this.title = title; }
  public boolean isCompleted() { return completed; }
  public void setCompleted(boolean completed) { this.completed = completed; }
}

3. 修正URL拼写错误(可选但建议)

注意到你前端和后端的URL都写的是udateJsonData(少了字母p,正确应为updateJsonData),虽然当前拼写一致,但属于明显的笔误,建议统一修正为正确名称,避免后续维护时混淆。

4. 确认跨域配置(若前后端端口不同)

如果你的Angular应用运行在4200端口,后端在8080端口,需要在Spring Boot控制器上添加跨域支持,否则浏览器会拦截PUT请求:

@CrossOrigin(origins = "http://localhost:4200")
@RestController
public class YourTodoController {
    // 控制器方法...
}

完成以上调整后,重启后端服务再测试PUT请求,应该就能正常获取到请求体中的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:59:04