@requestbody是接收json数据的核心注解,需配合无参构造器、getter/setter及content-type: application/json请求头,缺一不可。

在 Spring Boot 中,用 @PostMapping 接收 JSON 数据,核心是让控制器方法能自动把请求体里的 JSON 解析成 Java 对象,关键在于三件事:加 @RequestBody、确保类有无参构造器和 getter/setter、接口请求头要带 Content-Type: application/json。
1. 控制器方法必须加 @RequestBody
@PostMapping 只负责匹配 URL 和 HTTP 方法,它本身不解析请求体。真正把 JSON 字符串转成对象的是 @RequestBody 注解:
@PostMapping("/user")
public ResponseEntity<string> createUser(@RequestBody User user) {
System.out.println(user.getName()); // 能正常取到前端传的 name
return ResponseEntity.ok("success");
}</string>
漏掉 @RequestBody,Spring 会尝试按路径变量或表单参数去绑定,JSON 就会被忽略或报 400 错误。
2. 实体类要符合 Jackson 反序列化要求
Spring 默认用 Jackson 解析 JSON,所以你的 User 类需要满足:
- 有 public 无参构造方法(默认就有也行)
- 每个字段有 public 的 getter 和 setter(Lombok 的
@Data可一键生成) - 字段名和 JSON key 一致(大小写敏感),或用
@JsonProperty("user_name")显式指定
例如:
public class User {
private String name;
private Integer age;
public User() {} // 必须有
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }
}
3. 前端请求要发标准 JSON + 正确 Content-Type
后端不会自动识别 JSON,必须靠请求头声明:
- 设置
Content-Type: application/json - 请求体是合法 JSON 字符串(不是 form-data,也不是 URL 编码)
比如用 fetch:
fetch('/user', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ "name": "张三", "age": 25 })
});
如果用 Postman,选 Body → raw → JSON,并确认右上角下拉菜单是 JSON,不是 Text 或 Form-data。
4. 常见问题快速排查
如果接收不到数据,优先检查这几项:
- 控制台是否报
400 Bad Request?大概率是 JSON 格式错、字段类型不匹配或缺少 setter - 是否用了
@RequestParam或@PathVariable试图接 JSON?不行,必须用@RequestBody - 实体类字段是
int但 JSON 里传了null?换成Integer避免反序列化失败 - 启动日志有没有
MappingJackson2HttpMessageConverter加载成功?一般默认都有,不用额外配
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











