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
相关产品推荐
相关产品推荐

