@requestbody 是 spring boot 中接收 json 请求体最常用方式,需配合 content-type: application/json 请求头,参数为带无参构造器和匹配字段名的 java 实体类,由 jackson 自动反序列化。

在 Spring Boot 的 REST 接口中,@RequestBody 是接收 JSON 请求体最常用、最直接的方式。它会自动将 HTTP 请求体中的 JSON 字符串反序列化为 Java 对象,前提是控制器方法参数上正确标注了该注解,并且类结构与 JSON 结构匹配。
确保请求头和内容格式正确
前端发送请求时,必须设置 Content-Type: application/json,否则 Spring 不会尝试用 @RequestBody 解析。常见错误是漏设 header 或误传 form-data、x-www-form-urlencoded 格式。
- ✅ 正确示例(curl):
curl -X POST http://localhost:8080/api/user \-H "Content-Type: application/json" \-d '{"name":"张三","age":28}' - ❌ 错误:没加
Content-Type或写成text/plain,会导致 415 Unsupported Media Type
定义匹配的 Java 实体类
@RequestBody 后面的参数类型必须有无参构造器,且字段名(或通过 @JsonProperty 指定的名称)需与 JSON key 一致。推荐使用 Lombok 简化 getter/setter 和构造器。
- 例如 JSON 是
{"username":"alice","email":"a@b.com"},则 Java 类应为:
public class UserRequest {
private String username;
private String email;
// 无参构造器 + getter/setter(Lombok 可加 @Data)
}
在 Controller 方法中使用 @RequestBody
直接将实体类作为方法参数,并加上 @RequestBody 注解即可。Spring MVC 会借助 Jackson 自动完成反序列化。
@PostMapping("/api/user")
public ResponseEntity<string> createUser(@RequestBody UserRequest request) {
System.out.println(request.getUsername()); // 输出 alice
return ResponseEntity.ok("success");
}</string>
- 如果 JSON 字段缺失或类型不匹配(如字符串传了数字),默认会返回 400 Bad Request
- 可通过
@Valid+ Hibernate Validator 进行校验,配合@NotNull等注解提前拦截非法输入
处理嵌套对象或集合
JSON 中含数组或对象嵌套时,Java 类对应字段声明为 List 或嵌套 POJO 即可,Jackson 会递归解析。
- 例如 JSON:
{"name":"团队A","members":[{"name":"李四"},{"name":"王五"}]} - 对应 Java 类:
private String name;private List<member> members;</member> - 注意:List 字段不能是 null —— 建议初始化为
new ArrayList(),避免空指针











