@RequestBody和@ResponseBody注解的作用
文章目录
- 一、前言:HTTP请求与响应中的"翻译官"
- 二、@RequestBody:把前端数据变成Java对象
- 1. 基本作用
- 2. 工作原理
- 3. 使用要点
- 三、@ResponseBody:把Java对象变成前端数据
- 1. 基本作用
- 2. 工作原理
- 3. 使用要点
- 四、实际应用示例
- 1. 完整控制器示例
- 2. 前后端交互流程
- 五、常见问题解答
- 1. 不加这两个注解会怎样?
- 2. 可以处理哪些数据格式?
- 3. 为什么我的@RequestBody不工作?
- 六、总结对比表
一、前言:HTTP请求与响应中的"翻译官"
在Web开发中,前端和后端就像两个说不同语言的人交流:前端通常使用JSON或XML格式的数据,而后端则使用Java对象。要让它们互相理解,就需要"翻译官"——这就是@RequestBody
和@ResponseBody
注解的作用。
二、@RequestBody:把前端数据变成Java对象
1. 基本作用
@RequestBody
就像是前端的"数据接收器",它能把前端发送的JSON/XML数据自动转换成Java对象。
2. 工作原理
想象一下这个场景:
- 前端发送:
{"name":"张三","age":25}
- 后端接收:
@PostMapping("/user") public String createUser(@RequestBody User user) {// user对象已经自动填充了name="张三", age=25return "创建成功"; }
3. 使用要点
- 主要用于POST/PUT请求
- 通常与
@PostMapping
或@PutMapping
一起使用 - 前端需要设置请求头
Content-Type: application/json
三、@ResponseBody:把Java对象变成前端数据
1. 基本作用
@ResponseBody
是后端的"数据转换器",它能把Java对象自动转换成JSON/XML格式返回给前端。
2. 工作原理
后端处理:
@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable int id) {User user = userService.findById(id);return user; // 自动转换为JSON
}
前端收到:{"id":1,"name":"李四","age":30}
3. 使用要点
- 可以用在任何请求方法上
- 在Spring 4.0+,可以用
@RestController
代替@Controller
+@ResponseBody
- 前端会自动收到JSON格式数据
四、实际应用示例
1. 完整控制器示例
@RestController // 相当于@Controller + @ResponseBody
@RequestMapping("/api")
public class UserController {@PostMapping("/users")public User createUser(@RequestBody User user) {// 保存用户return userService.save(user);}@GetMapping("/users/{id}")public User getUser(@PathVariable int id) {return userService.findById(id);}
}
2. 前后端交互流程
- 前端POST发送JSON →
@RequestBody
转换成Java对象 - 后端处理业务逻辑
- 返回Java对象 →
@ResponseBody
转换成JSON - 前端接收JSON数据
五、常见问题解答
1. 不加这两个注解会怎样?
- 不加
@RequestBody
:后端无法正确解析POST请求体 - 不加
@ResponseBody
:Spring会尝试找视图模板而不是返回JSON
2. 可以处理哪些数据格式?
默认支持JSON,通过配置也可以支持XML等其他格式。
3. 为什么我的@RequestBody不工作?
检查:
- 请求方法是否正确(POST/PUT)
- 请求头
Content-Type
是否设置 - JSON字段名是否与Java属性名匹配
六、总结对比表
注解 | 作用方向 | 主要用途 | 常见搭配 |
---|---|---|---|
@RequestBody | 请求→后端 | 将请求体转换为Java对象 | @PostMapping等 |
@ResponseBody | 后端→响应 | 将返回值转换为JSON/XML格式 | 所有请求映射方法 |
这两个注解就像Web开发中的"数据桥梁",让前后端能够用各自熟悉的数据格式进行通信,大大简化了开发流程。