新增用户Post接口报Required request body is missing错误求助
这个报错我太熟了!就是后端没接收到你Post请求里的用户数据,我帮你一步步排查解决:
问题本质
你看到的Required request body is missing错误,核心原因是Spring(不管是Spring MVC还是Spring Boot)的Controller方法没有正确识别并解析请求体里的User对象,大概率是注解遗漏、实体类配置不对,或者Postman的请求设置出了问题。
分步解决
1. 给Controller方法加上关键注解
你的create方法必须加上@RequestBody注解,这是告诉Spring:“我要从请求体里拿数据来实例化这个User对象”,代码应该改成这样:
@PostMapping("/users") // 这里的路径根据你的实际配置调整 public User create(@RequestBody User user) { // 重点:@RequestBody不能少 // 你的用户保存逻辑,比如调用Repository的save方法 return userRepository.save(user); }
要是漏了这个注解,Spring会默认把User参数当成URL参数去解析,自然找不到请求体里的JSON数据,直接报错。
2. 确保User实体类能被正确解析
Spring要把JSON转成User对象,得满足几个条件:
- 必须有无参构造函数:Spring默认用无参构造来实例化对象,哪怕你有带参构造,也要保留无参的
- 字段要有getter/setter方法:Spring通过setter给字段赋值,要是没有,字段会是null,甚至解析失败
- 字段名要和JSON键名对应:比如你Post的JSON里是
"firstname":"张三",实体类里的字段就得是firstname(大小写敏感)
给你个示例参考,用Lombok的话会省很多代码:
@Entity @Data // Lombok自动生成getter/setter、无参构造、equals/hashCode等 public class User extends PersistenceGenerique { private static final long serialVersionUID = 245457152874587458468L; @Column private String firstname; // 注意@OrderBy一般用在关联集合上,单个字段加这个没意义,建议去掉 // 其他字段比如lastname、email等... }
要是不用Lombok,就手动写无参构造和getter/setter:
public User() {} // 一定要有这个无参构造 public String getFirstname() { return firstname; } public void setFirstname(String firstname) { this.firstname = firstname; }
3. 检查Postman的请求配置(这步很容易忘!)
哪怕后端代码对了,Postman设置错了也会报错,一定要检查这几点:
- 请求方法选
POST,URL要和Controller的@PostMapping路径完全匹配 - 请求头里必须加
Content-Type: application/json,告诉后端你发的是JSON格式的数据 - 在
Body标签里选raw,然后格式下拉框选JSON,再填入正确的用户JSON数据,比如:
{ "firstname": "张三", // 其他字段按需添加 }
要是没加Content-Type头,Spring不知道该怎么解析请求体,照样会报“缺少请求体”的错误。
4. 排查父类的问题
你的User类继承了PersistenceGenerique,要是这个父类里有字段,也要确保这些字段有getter/setter,并且父类也有无参构造,不然Spring解析的时候也会出问题。
验证调整
按照上面的步骤改完之后,再重新用Postman发请求,应该就能正常接收到User对象并保存到数据库了。
内容的提问来源于stack exchange,提问作者Jeizi
相关产品推荐
相关产品推荐

