SpringMVC @ResponseBody注解详解
概要
@ResponseBody是 Spring MVC 中的一个重要注解,用于指示方法的返回值应该直接作为 HTTP 响应体返回,而不是解析为视图名称。
基本功能
@ResponseBody主要用于
- 将Java对象转换为HTTP响应体(通常是JSON或XML)
- 绕过视图解析器直接返回数据
- 构建RESTful API
使用方式
方法级别
@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {return userService.findById(id); // 直接返回User对象,自动转换为JSON
}
类级别(结合@Controller)
@Controller
@ResponseBody
@RequestMapping("/api/users")
public class UserApiController {// 所有方法都自动使用@ResponseBody
}
更简洁的@RestController
Spring4.0引入了@RestController,它组合了@Controller和@ResponseBody:
@RestController // 等同于 @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserApiController {// 所有方法都自动使用@ResponseBody
}
工作原理
- 当方法标注@ResponseBody时:
- Spring会使用HttpMessageConverter将返回值转换为指定格式
- 默认情况下,如果类路径有Jackson库,会转换为JSON
- 转换过程:
Java对象 → HttpMessageConverter → HTTP响应体(JSON/XML等)
常见用途
返回JSON数据:
@GetMapping("/orders")
@ResponseBody
public List<Order> getOrders() {return orderService.findAll();
}
返回简单字符串:
@GetMapping("/status")
@ResponseBody
public String getStatus() {return "OK";
}
自定义相应内容类型:
@GetMapping(value = "/xml", produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public User getXmlUser() {return new User("John", "Doe");
}
相关注解
注解 | 说明 |
---|---|
@RequestBody | 将HTTP请求体转换为Java对象 |
@RestController | 组合了@Controller和@ResponseBody |
@ResponseStatus | 指定HTTP响应状态码 |