SpringBoot Rest PUT方法无法正确接收User对象非id属性数据
问题分析与解决方案
我一眼就揪出了问题的核心——你的updateUser方法里的User user参数缺少了@RequestBody注解!
为什么会出现这个情况?
Spring MVC 默认不会自动把HTTP请求体里的JSON数据绑定到方法参数上。你看到id有值,是因为它是@PathVariable路径变量,Spring能直接从URL里解析出来;但其他属性因为没明确告诉框架要从请求体读取,所以都被初始化为null了。
修改后的代码
把你的updateUser方法调整成这样:
@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); }
额外检查项
- 确保你的
User实体类的所有属性都有对应的getter和setter方法,Jackson依赖这些方法完成JSON与POJO的序列化/反序列化。 - 核对JSON请求体里的字段名和
User类的属性名是否完全匹配(大小写敏感),比如你请求里的username、email要和类里的属性名一致。
改完之后再用你原来的curl命令测试,就能看到user对象的所有属性都被正确赋值啦!
内容的提问来源于stack exchange,提问作者en Peris
相关产品推荐
相关产品推荐

