@ResponseBody用于请求处理方法上,表示方法返回的结果直接写入 HTTP 响应正文(ResponseBody)中,而不是将视图名称解析为视图的内容。该注解通常用于返回 JSON、XML 或二进制数据,而不是 HTML 视图。
以下是一个使用 @ResponseBody 注解的示例:
@RestController
public class UserController {
@GetMapping("/user/{userId}")
public ResponseEntity<User> getUser(@PathVariable Long userId) {
User user = userService.getUserById(userId);
if (user != null) {
return ResponseEntity.ok(user);
} else {
return ResponseEntity.notFound().build();
}
}
}
在上面的示例中,我们在 getUser() 方法上使用了 @GetMapping 和 @ResponseBody 注解。当该方法被调用时,它会在 HTTP 响应正文中直接返回 User 对象(如果存在)。
由于 @RestController 注解默认会对所有的请求处理方法添加 @ResponseBody 注解,因此以上示例等价于下面的代码:
@RestController
public class UserController {
@GetMapping("/user/{userId}")
public User getUser(@PathVariable Long userId) {
User user = userService.getUserById(userId);
return user;
}
}
在上面的代码中,我们省略了 @ResponseBody 注解,但是因为 @RestController 默认在所有请求处理方法中添加 @ResponseBody 注解,所有 getUser() 方法也会将 User 对象直接写入 HTTP 响应正文中。