典型用法
基本用法:返回 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")@ResponseBodypublic 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);
}