欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 【Spring】Spring 注解解码:@RequestBody 与 @ResponseBody 的双向桥梁艺术

【Spring】Spring 注解解码:@RequestBody 与 @ResponseBody 的双向桥梁艺术

2025/4/6 3:58:58 来源:https://blog.csdn.net/2302_79527141/article/details/146408382  浏览:    关键词:【Spring】Spring 注解解码:@RequestBody 与 @ResponseBody 的双向桥梁艺术

1.介绍@RequestBody和@ResponseBody

@RequestBody此注解一般用于将 HTTP 请求体中的内容转换为 Java 对象。通常在处理 ==POST、PUT ==这类请求时,客户端会把数据放在请求体里,使用@RequestBody就能把请求体中的数据映射到对应的 Java 对象上。

@ResponseBody该注解的作用是把控制器方法返回的 Java 对象转换为 HTTP 响应体(简单的来说直接返回的是数据)。一般来说,Spring MVC 会把返回值解析成视图名称,再用视图解析器找到对应的视图来渲染响应。但使用@ResponseBody后,会直接把返回的 Java 对象通过消息转换器转换为指定格式(如 JSON、XML),并作为响应体返回给客户端。

2.使用场景

注解使用场景
@RequestBody接收客户端发送的复杂数据(如 POST/PUT 请求的 JSON 格式参数)。
@ResponseBody向客户端返回复杂数据(如 RESTful API 的 JSON 响应,避免视图解析)。

3.示例

3.1@RequestBody注解

3.1.1 传Json数据

创建一个User对象:

public class User {private String name;private Integer age;private String Sex;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return Sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +'}';}
}

采用Post/put请求传递Json数据:

@RestController
@RequestMapping("/path")
public class testControler {@RequestMapping("/r")public String request(@RequestBody User user){return "name:" + user.getName()+" age:"+user.getAge()+" 性别:"+user.getSex();}

注意:在浏览器中不能采用使用post方式请求:
127.0.0.1:8080/path/r?name=liming&age=20&sex=man
在这里插入图片描述
原因:请求方式不匹配,@RequestBody注解一般用于处理 POST、PUT 这类带有请求体的请求,浏览器搜索路径用的是 GET 请求,GET 请求通常没有请求体,使用 @RequestBody 注解就会出错。因为 @RequestBody 注解需要从请求体里获取数据。

3.1.2 通过URL参数来传递数据不需要使用@RequestBody

通过URL参数来传递数据不需要使用@RequestBody
后端代码:

    @RequestMapping("/r2")public String r2(User user){return "name:" + user.getName()+" age:"+user.getAge()+" 性别:"+user.getSex();}

运行后,使用浏览器搜素:127.0.0.1:8080/path/r2?name=liming&age=20&sex=man
在这里插入图片描述

Spring 会尝试从请求的参数里获取数据并绑定到 User 对象的属性上。这意味着可以通过 URL 参数(如 ?name=liming&age=20)来传递数据,Spring 会自动把这些参数映射到 User 对象的对应属性上。

3.2@ResponseBody

3.2.1@responseBody注解配合@Controller注解

@ResponseBody 注解的核心作用是告知 Spring 框架,把控制器方法的返回值直接序列化为 JSON、XML 或者其他媒体类型,并写入 HTTP 响应体。这样一来,客户端收到的响应就是方法返回的具体数据,而非视图页面

代码演示:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@RequestMapping("/basic")
@Controller
public class BasicController {@RequestMapping("/say")@ResponseBodypublic String Hello() {return "Hello!";}
}

运行程序后再浏览器搜索127.0.01:8080/basic/say
结果:
在这里插入图片描述

3.2.2@RestController=@responseBody+@Controller

@RestController:这是 @Controller 和 @ResponseBody 的组合注解,表明该类是一个控制器,并且类中的所有方法返回值都会直接写入响应体

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;// @RestController 是 @Controller 和 @ResponseBody 的组合注解
@RestController
@RequestMapping("/test")
public class MyController {// 该方法返回一个字符串,会直接作为响应体返回给客户端@GetMapping("/hello")public String sayHello() {return "Hello, World!";}
}

运行程序后再浏览器搜索127.0.01:8080/test/hello
结果:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词