@ResponseBody注解的使用
@ResponseBody 注解是 Spring MVC 中的一个核心注解,用于指示控制器方法的返回值应直接写入 HTTP 响应体(而非视图解析)。以下是详细说明和使用示例:
核心作用
- 跳过视图解析器
方法返回值不经过ViewResolver解析为 HTML 页面,而是直接作为响应内容(JSON/XML/纯文本等)。 - 自动序列化
结合HttpMessageConverter,自动将对象转换为客户端需要的格式(如 JSON)。
使用场景
1. 返回字符串(纯文本)
@Controller
public class TextController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World!"; // 直接返回字符串到响应体
}
}
访问 /hello 输出:Hello World!
2. 返回 JSON 对象(RESTful API)
@Controller
public class UserController {
@GetMapping("/user")
@ResponseBody
public User getUser() {
return new User("Alice", 25); // 自动序列化为JSON
}
}
// 实体类
public class User {
private String name;
private int age;
// 省略构造方法/getter/setter
}
访问 /user 输出:{"name":"Alice","age":25}
简化写法:@RestController
Spring 4.0+ 提供组合注解 @RestController = @Controller + @ResponseBody
@RestController // 类中所有方法自动添加 @ResponseBody
public class ApiController {
@GetMapping("/data")
public Map<String, Object> getData() {
return Map.of("status", 200, "message", "success");
}
}
关键配置
1. 依赖(Spring Boot 自动配置)
确保项目中包含 JSON 库(默认使用 Jackson):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 自定义序列化(如日期格式)
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder()
.dateFormat(new SimpleDateFormat("yyyy-MM-dd"));
converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
}
}
常见问题
Q1: 返回中文字符乱码?
在 @RequestMapping 中指定编码:
@RequestMapping(value = "/text", produces = "text/plain;charset=UTF-8")
@ResponseBody
public String text() {
return "中文内容";
}
Q2: 如何返回 XML 格式?
- 添加 XML 转换器依赖(如 Jackson XML):
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency> - 客户端通过
Accept: application/xml头请求 XML 数据。
总结
| 场景 | 用法 | 示例返回值 |
|---|---|---|
| 返回纯文本 | @ResponseBody + String |
"Success" |
| 返回 JSON/XML 对象 | @ResponseBody + 自定义对象 |
{"id":1} |
| RESTful API 控制器 | 直接使用 @RestController |
自动处理序列化 |
通过 @ResponseBody,Spring 能高效构建 RESTful 服务,实现前后端分离架构中的数据交互。

浙公网安备 33010602011771号