用于将HTTP请求体的内容绑定到方法的参数上。通常情况下,我们使用这个注解来处理POST请求,特别是传递JSON格式的数据。
例:
@PostMapping("/user")
public ResponseEntity<String> createUser(@RequestBody User user) {
// @RequestBody注解将HTTP请求体中的JSON数据自动转换为User对象
// 也可以处理多个User对象:@RequestBody List<User> users
return R.ok();
}
实现原理:
@RequestBody
的实现依赖于消息转换器(Message Converter)。Spring框架提供了多种消息转换器,其中包括处理JSON格式的MappingJackson2HttpMessageConverter
。当使用@RequestBody
注解时,框架会根据请求的Content-Type
头选择合适的消息转换器,将请求体中的JSON数据转换为方法参数所需的Java对象。
?
用于将方法的返回值直接作为HTTP响应体返回给客户端。通常情况下,我们使用这个注解来返回JSON格式的数据。
@GetMapping("/user/{id}")
@ResponseBody
public User findUserById(@PathVariable Long id) {
// @ResponseBody注解将User对象转换为JSON格式,并将其作为HTTP响应体返回给客户端。
return userMpper.findById(id).orElse(null);
}
实现原理:与
@RequestBody
类似,@ResponseBody
的实现也依赖于消息转换器。框架会根据请求的Accept
头选择合适的消息转换器,将方法返回值转换为对应的响应体格式。对于JSON格式的响应,通常会使用MappingJackson2HttpMessageConverter
。
?也可以直接在 Controller 上加上 @RestController 注解 @RestController注解等价于@ResponseBody + @Controller。
@RestController是一个组合注解,它包含了@Controller和@ResponseBody两个注解的功能。
用@RestController标记的类表示这是一个RESTful风格的控制器,它可以处理HTTP请求并返回JSON格式的响应。 @RestController注解在处理请求时,会自动将方法的返回值转换为JSON格式的响应体,并返回给客户端。
因此,使用@RestController可以省去在每个方法上都加@ResponseBody注解的麻烦。
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
// 添加自定义的消息转换器
converters.add(new MyCustomMessageConverter());
}
}
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException ex) {
// 处理请求体验证异常
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid request body");
}