public Result save(@RequestBody Emp emp) //是将Emp实体类提交到Request请求的方法体
在 Spring 框架中,@RequestBody 注解的作用是 将 HTTP 请求体中的数据绑定到方法参数(这里是 Emp 实体类) 。具体解释如下:
一、@RequestBody 的核心作用
1. 数据流向
客户端(JSON/XML数据) → HTTP请求体 → @RequestBody → Java对象(Emp)
- 客户端将数据以 JSON、XML 等格式放在 HTTP 请求体 中。
@RequestBody注解会自动将请求体中的数据 反序列化为 Java 对象(借助 Jackson 等序列化工具)。
2. 典型应用场景
- POST/PUT 请求:用于创建或更新资源(如新增员工、修改用户信息)。
- 复杂对象传递:当参数是嵌套对象或数组时(如
Emp包含多个属性)。
二、代码示例解析
1. Controller 方法
@PostMapping("/save")
public Result save(@RequestBody Emp emp) {
// emp 对象已自动填充请求体中的数据
empService.save(emp); // 调用 Service 保存到数据库
return Result.success();
}
2. 客户端请求示例(JSON 格式)
// HTTP POST 请求到 /save
// 请求头:Content-Type: application/json
{
"id": 1,
"name": "张三",
"gender": 1,
"salary": 8000.0,
"hireDate": "2023-01-01"
}
3. Emp 实体类(简化)
@Data // Lombok注解,自动生成getter/setter
public class Emp {
private Integer id;
private String name;
private Integer gender;
private Double salary;
private LocalDate hireDate;
}
三、@RequestBody 的关键细节
1. 请求头要求
-
必须指定
Content-Type:- JSON:
Content-Type: application/json - XML:
Content-Type: application/xml
- JSON:
2. 数据格式与 Java 对象的映射
-
字段名必须匹配:JSON 字段名与 Java 对象属性名需一致(忽略大小写)。
-
复杂对象支持:支持嵌套结构,例如:
{ "id": 1, "department": { "deptId": 101, "deptName": "技术部" } }对应的 Java 类:
@Data public class Emp { private Integer id; private Department department; // 嵌套对象 } @Data public class Department { private Integer deptId; private String deptName; }
3. 异常处理
- 请求体为空:默认抛出
HttpMessageNotReadableException。 - 格式不匹配:如 JSON 字段类型与 Java 属性类型不一致,会抛出
HttpMessageConversionException。
四、@RequestBody vs @RequestParam
| @RequestBody | @RequestParam |
|---|---|
| 处理 HTTP 请求体中的数据 | 处理 URL 参数(如 ?name=张三) |
| 适用于 POST/PUT 请求 | 适用于 GET 请求或表单提交 |
| 适合复杂对象(如 JSON/XML) | 适合简单参数(如单个字符串、数字) |
每个方法最多一个 @RequestBody 参数 | 可多个 @RequestParam 参数 |