@RequestBody 和 @ResponseBody 的使用场景

该文章已生成可运行项目,

在 Spring MVC 或 Spring Boot 中,@RequestBody@ResponseBody 是处理 HTTP 请求与响应体数据的核心注解,使用场景与 数据格式交互方式 直接相关,具体如下:

一、@RequestBody:接收请求体数据

作用:将 HTTP 请求的 请求体(Request Body) 中的数据(通常是 JSON、XML 等格式)绑定到控制器方法的参数上。

适用场景:

  1. 客户端发送非表单格式的请求数据(如 JSON、XML)时:
    例如前端通过 axios.post(url, {name: "xxx", age: 18}) 发送 JSON 数据,后端需要用 @RequestBody 接收并转换为 Java 对象。

    @PostMapping("/user")
    public String addUser(@RequestBody User user) { 
        // user 会自动接收请求体中的 JSON 数据并完成属性映射
        return "success";
    }
    
  2. 请求数据不在 URL 或表单参数中,而在请求体里
    常见于 POSTPUT 等 HTTP 方法(这些方法通常通过请求体传递数据),GET 方法一般没有请求体,因此很少用 @RequestBody

  3. 需要接收复杂数据结构(如嵌套对象、数组)时:
    表单参数(@RequestParam)适合简单键值对,而 @RequestBody 可直接绑定复杂 JSON 到 Java 实体类。

二、@ResponseBody:返回响应体数据

作用:将控制器方法的 返回值 直接写入 HTTP 响应体(Response Body),而非跳转页面(默认行为),通常会自动转换为 JSON/XML 等格式(由消息转换器处理)。

适用场景:

  1. 开发 RESTful API(返回数据而非页面)
    例如接口需要返回 JSON 格式的用户信息、列表数据等,而非跳转 JSP/HTML 页面。

    @GetMapping("/user/{id}")
    @ResponseBody
    public User getUser(@PathVariable Long id) {
        User user = userService.findById(id);
        // 返回的 user 对象会自动转为 JSON 写入响应体
        return user;
    }
    
  2. 前端需要异步获取数据(如 AJAX 请求)时:
    前端通过 AJAX 调用接口后,需要直接接收数据(而非页面),此时用 @ResponseBody 返回数据。

  3. 控制器类使用 @RestController 时可省略
    @RestController@Controller + @ResponseBody 的组合,类中所有方法默认都会加上 @ResponseBody,无需单独声明。

总结:

  • @RequestBody收数据,用在方法参数上,接收请求体中的 JSON/XML 等数据并绑定到对象。
  • @ResponseBody发数据,用在方法上(或通过 @RestController 简化),将返回值转为 JSON/XML 写入响应体。

两者通常配合使用,实现前后端通过 JSON 等格式进行数据交互(而非传统的表单提交+页面跳转)。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值