典型用法
基本用法:返回 JSON 数据
@GetMapping("/users/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
Spring 自动使用 Jackson(或其他 HttpMessageConverter)将 User 对象序列化为 JSON。
响应头 Content-Type 默认为 application/json。
结合 @Controller 使用(等价于 @RestController)
@RestController = @Controller + 所有方法默认加 @ResponseBody
@Controller
public class UserController {
@GetMapping("/users")
@ResponseBody
public List<User> getAllUsers() {
return userService.findAll();
}
}
等价于使用
@RestController
public class UserController {
@GetMapping("/users")
public List<User> getAllUsers() {
return userService.findAll();
}
}
返回统一响应结构(推荐做法)
实际项目中通常会封装统一的响应格式,如:
public class ApiResponse<T> {
private int code;
private String message;
private T data;
// 构造器、getter/setter
}
@GetMapping("/users/{id}")
@ResponseBody
public ApiResponse<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ApiResponse.success(user);
}
// 响应示例(JSON):
{
"code": 200,
"message": "OK",
"data": {
"id": 1,
"name": "Alice"
}
}
支持 XML 输出(需配置 Jackson XML 模块)
如果客户端请求头指定 Accept: application/xml,Spring 可以自动返回 XML 格式:
@GetMapping(value = "/users", produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public List<User> getAllUsersInXml() {
return userService.findAll();
}
// 响应示例(XML):
<user>
<id>1</id>
<name>Alice</name>
</user>
返回字符串原始内容(不序列化)
如果你希望直接返回字符串内容而不是 JSON,可以这样做:
@GetMapping("/hello")
@ResponseBody
public String sayHello() {
return "Hello, World!";
}
结合 ResponseEntity 使用(更灵活控制响应)
虽然 @ResponseBody 很方便,但如果你需要控制状态码或响应头,建议使用 ResponseEntity:
@GetMapping("/users")
public ResponseEntity<List<User>> getAllUsers() {
List<User> users = userService.findAll();
return ResponseEntity.ok().header("X-Custom-Header", "value").body(users);
}