spring-webmvc @ResponseBody 典型用法

发布于:2025-06-23 ⋅ 阅读:(14) ⋅ 点赞:(0)

典型用法

基本用法:返回 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);
}

网站公告

今日签到

点亮在社区的每一天
去签到