@requestbody用于将json请求体自动反序列化为java对象,需引入jackson依赖、定义匹配字段的pojo类、在controller参数加注解,并确保content-type为application/json及json格式正确。

在 Spring Boot 中,@RequestBody 是接收前端发送的 JSON 数据最常用的方式。它会自动将 HTTP 请求体中的 JSON 字符串反序列化为 Java 对象,前提是控制器方法参数上标注了该注解,并且类路径下有 Jackson(默认)等 JSON 处理库。
1. 确保项目已引入 Jackson 依赖
Spring Boot 2.3+ 默认不再自动包含 jackson-databind,如果发现 JSON 解析失败(如 400 错误、"Required request body is missing"),请检查是否已添加:
-
spring-boot-starter-web(通常已含 Jackson,但需确认) - 若缺失,手动添加:
com.fasterxml.jackson.core
jackson-databind
2. 定义接收数据的 Java 实体类(POJO)
实体类字段名需与 JSON 字段名一致(或通过 @JsonProperty 映射),推荐使用 Lombok 简化代码:
@Data
public class UserRequest {
private String username;
private Integer age;
private List<string> hobbies;
}</string>
注意:字段必须有 public getter/setter(Lombok @Data 自动提供),否则 Jackson 无法赋值。
3. 在 Controller 方法中使用 @RequestBody
直接将实体类作为参数,并加上 @RequestBody 注解:
@PostMapping("/api/user")
public ResponseEntity<string> createUser(@RequestBody UserRequest user) {
System.out.println("收到用户:" + user.getUsername());
return ResponseEntity.ok("创建成功");
}</string>
关键点:
- 请求头必须设置
Content-Type: application/json - 前端发送的是合法 JSON 字符串,例如:
{"username":"张三","age":25,"hobbies":["读书","游泳"]} - 如果 JSON 字段缺失且对应 Java 字段不可为空(如 int 类型),会报 400 错误;建议用包装类型(Integer)并配合
@NotNull等校验注解
4. 处理常见问题
遇到解析失败时,优先检查以下几点:
- 前端是否真的发送了请求体(不是 query 或 form-data)
- JSON 格式是否正确(可用 JSONLint 验证)
- Java 字段类型是否匹配(如 JSON 中
"age": "25"是字符串,不能映射到Integer age) - 是否因字段名大小写不一致导致忽略(Jackson 默认按驼峰规则匹配,也可用
@JsonProperty("user_name")显式指定) - 全局配置可开启日志查看反序列化过程:
logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor=DEBUG
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











