@ResponseBody@RequestBody注解

@ResponseBody

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区。@responseBody注解同样可以加载类上。GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

@RequestMapping("/login")
@ResponseBody
public User login(User user){
  return user;
}
User字段:userName pwd
那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

效果等同于如下代码:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
  response.getWriter.write(JSONObject.fromObject(user).toString());
}

@RestController注解是@Controller和@ResponseBody注解的结合

@RestController
public class MayController {

	@RequestMapping("/test")
	public String test() {
		return "hello world";

	}
}

 

@RequestBody

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的

@RestController
public class MayController {

	@RequestMapping("/test")
	public String test(@RequestBody UserDTO userDTO) {
		return "hello "+userDTO.getName();

	}
}

User字段:name age
那么在前台请求的数据为:'{"name":"xxx","age":"xxx"}'

如果请求参数是String类型

@RequestMapping("/login")
@ResponseBody
public User login(String name){
  return name;
}
请求数据为 name

 

 

### 作用与使用方法 在 Spring 框架中,`@ResponseBody` 和 `@RequestBody` 是用于处理 HTTP 请求和响应的两个常用注解。它们分别负责将 Java 对象转换为 HTTP 响应体中的数据,以及将 HTTP 请求体中的数据转换为 Java 对象。 #### @RequestBody `@RequestBody` 的主要作用是将 HTTP 请求体中的数据(如 JSON 或 XML)解析为 Java 对象。这个注解通常用在控制器方法的参数上,表示该参数的值将从请求体中获取。例如,在处理 POST 请求时,客户端发送的 JSON 数据可以通过 `@RequestBody` 注解自动转换为对应的 Java 对象。需要注意的是,`@RequestBody` 不能用于 GET 请求,因为 GET 请求没有请求体[^4]。 ```java @PostMapping("/users") public void createUser(@RequestBody User user) { // 使用 user 对象进行操作 } ``` #### @ResponseBody `@ResponseBody` 的主要作用是告知 Spring 框架,将控制器方法的返回值直接序列化为 JSON、XML 或其他媒体类型,并写入 HTTP 响应体中。这样一来,客户端收到的响应就是方法返回的具体数据,而非视图页面。这个注解通常用在方法返回值或方法上,表示该方法的返回值将直接作为响应体返回给客户端[^2]。 ```java @GetMapping("/users/{id}") @ResponseBody public User getUser(@PathVariable Long id) { return userRepository.findById(id); } ``` ### 数据格式与工作流程 两者都依赖于 `HttpMessageConverter` 接口来完成数据的序列化和反序列化。例如,`Jackson` 库中的 `ObjectMapper` 被广泛用于处理 JSON 数据。当客户端发送 JSON 请求时,`@RequestBody` 会使用 `HttpMessageConverter` 将 JSON 转换为 Java 对象;而当控制器方法返回 Java 对象时,`@ResponseBody` 会调用 `HttpMessageConverter` 将对象转换为 JSON 数据,并将其写入响应体中[^4]。 ### 常见问题 在实际使用过程中,可能会遇到乱码问题或者数据格式不匹配的问题。这些问题通常可以通过配置合适的 `HttpMessageConverter` 来解决。例如,确保在 Spring 配置中正确引入了 `Jackson` 依赖,以便支持 JSON 数据的处理[^4]。 此外,对于需要同时使用 `@ResponseBody` 的多个方法,可以使用 `@RestControler` 注解来简化配置。`@RestController` 相当于 `@Controller` 和 `@ResponseBody` 的组合,一旦类上使用了 `@RestController`,所有控制单元返回的都是 XML 或 JSON 数据,而无法实现页面跳转功能[^5]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值