在 Spring Boot 开发 RESTful API 时,@RequestBody 是接收客户端请求体数据的核心注解,主要用于处理 POST/PUT/PATCH 等带请求体的 HTTP 请求。 它的核心能力是自动将 JSON/XML 格式的请求体数据反序列化为 Java 对象,底层依赖 Spring 默认集成的 Jackson 序列化框架,是前后端数据交互中最常用的注解之一。
将 HTTP 请求体(Request Body) 中的数据(JSON/XML)绑定到控制器方法的参数上,自动完成数据类型转换和对象封装。
Spring Boot 内置 MappingJackson2HttpMessageConverter 消息转换器,自动完成: 前端 JSON 字符串 → 后端 Java 对象(反序列化)
接收客户端提交的复杂对象数据(用户注册、订单创建、全量更新)
处理 application/json 格式的请求(最常用)
仅用于 POST/PUT/PATCH 请求(带请求体的请求)
required:参数是否必填,默认 true(无请求体直接报错)
@RequestBody(required = false) // 允许无请求体Spring Boot Web 场景(自动集成 Jackson)
请求格式:application/json
响应格式:application/json
必须提供 getter/setter 方法(Jackson 序列化 / 反序列化依赖),推荐使用 Lombok 简化代码:
import lombok.Data; // Lombok 注解,自动生成getter/setter/toString
/**
* 用户实体类:对应前端传递的 JSON 数据结构
*/
@Data // 核心注解,省略手写get/set/toString
public class User {
// 用户ID
private Long id;
// 用户名
private String name;
// 年龄
private Integer age;
// 邮箱
private String email;
}import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/users") // 统一接口前缀
public class UserController {
/**
* 1. 新增用户:接收 JSON 请求体
* 请求方式:POST /api/users
* 请求体:JSON 格式的 User 对象
*/
@PostMapping
public String createUser(@RequestBody User user) {
// 直接使用封装好的 User 对象
System.out.println("新增用户:" + user);
return "用户创建成功:" + user.getName();
}
/**
* 2. 全量更新用户:接收 JSON 请求体
* 请求方式:PUT /api/users/1
*/
@PutMapping("/{id}")
public String updateUser(
@PathVariable Long id,
@RequestBody User user // 接收更新数据
) {
user.setId(id);
System.out.println("更新用户:" + user);
return "用户更新成功";
}
/**
* 3. 非必填请求体(required = false)
*/
@PostMapping("/optional")
public String optionalBody(@RequestBody(required = false) User user) {
if (user == null) {
return "未传递请求体";
}
return "接收数据:" + user;
}
}import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootRequestBodyApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootRequestBodyApplication.class, args);
}
}注:这里需要使用 ApiPost 或 cURL 工具进行测试
请求地址:POST http://localhost:8080/api/users 请求头:Content-Type: application/json 请求体:
{
"id": 1,
"name": "卡提西亚",
"age": 18,
"email": "test@163.com"
}控制台输出:
新增用户:User(id=1, name=卡提西亚, age=18, email=test@163.com)响应结果:用户创建成功:卡提西亚
适用于批量操作(批量新增、批量删除):
/**
* 批量新增用户:接收 JSON 数组
* 请求体:[{"name":"张三"},{"name":"李四"}]
*/
@PostMapping("/batch")
public String batchCreateUser(@RequestBody List<User> userList) {
System.out.println("批量新增用户:" + userList);
return "批量创建成功,共" + userList.size() + "人";
}支持复杂 JSON 结构:
// 嵌套实体类
@Data
public class Order {
private Long orderId;
private User user; // 嵌套User对象
}
// 控制器
@PostMapping("/orders")
public String createOrder(@RequestBody Order order) {
return "订单创建成功:" + order.getUser().getName();
}对请求体数据做合法性校验(非空、长度、格式等):
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
// 实体类添加校验注解
@Data
public class User {
private Long id;
@NotBlank(message = "用户名不能为空") // 非空校验
private String name;
}
// 控制器开启校验
@PostMapping
public String createUser(@Valid @RequestBody User user) {
return "用户创建成功";
}规范使用 新增用 @PostMapping + @RequestBody,更新用 @PutMapping + @RequestBody。
参数校验 所有接口必须配合 @Valid 做参数校验,避免非法数据入库。
异常统一处理 全局捕获请求体解析异常、参数校验异常,返回标准化响应。
数据安全 敏感数据(密码、身份证)必须放在请求体中,禁止放在 URL 暴露。
编码规范 统一使用 application/json 格式,前后端字段名采用驼峰命名。
核心功能:@RequestBody 自动将 JSON 请求体转换为 Java 对象,是处理复杂提交数据的核心注解;
使用限制:仅用于 POST/PUT/PATCH 请求,禁止用于 GET;
必备条件:实体类必须有 getter/setter,前端需指定 application/json 请求头;
扩展能力:支持集合、嵌套对象、参数校验,满足所有复杂数据交互场景。