@responsebody将方法返回值序列化为json响应体,核心依赖jackson(spring boot默认集成jackson-databind),需确保有getter方法、配置注解驱动,并由mappingjackson2httpmessageconverter完成转换。

Spring MVC 中使用 @ResponseBody 将控制器方法返回值转为 JSON 并写入响应体,核心在于配置好 Jackson(或 Gson)依赖、开启 MVC 注解驱动,并确保返回对象可被序列化。
确保项目引入了 Jackson 依赖
Spring Boot 项目默认已包含 spring-boot-starter-web,它自动拉取 jackson-databind;若为传统 Spring MVC 项目,需手动添加:
- Maven 中加入:
com.fasterxml.jackson.core
jackson-databind - 确保类路径下有
ObjectMapper实例(Spring 会自动注册),无需手动配置即可支持常见 Java 类型(如 String、List、Map、POJO)转 JSON。
在 Controller 方法上标注 @ResponseBody
该注解告诉 Spring:不走视图解析,直接将方法返回值序列化为 HTTP 响应体内容(默认为 JSON):
- 可单独使用,也可与
@RestController(等价于@Controller + @ResponseBody)配合 - 方法返回值可以是 POJO、List、Map、String,甚至自定义对象(只要字段有 getter 或加了
@JsonProperty) - 示例:
@ResponseBody
public User getUser() {
return new User("Alice", 28);
}
确认 MVC 配置启用消息转换器
Spring MVC 默认注册了 MappingJackson2HttpMessageConverter,但需满足以下条件:
- 配置类中启用注解驱动:
@EnableWebMvc(传统 XML/Java 配置)或 Spring Boot 自动生效 - 请求头中包含
Accept: application/json(非必需,但推荐显式声明) - 响应 Content-Type 会自动设为
application/json;charset=UTF-8
处理常见问题
如果返回的是乱码、空对象或 406 错误,检查以下几点:
- POJO 字段是否为 private?确保提供 public getter 方法,否则 Jackson 默认不序列化
- 是否需要忽略某些字段?用
@JsonIgnore或@JsonInclude(JsonInclude.Include.NON_NULL) - 日期格式异常?可通过
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")控制输出格式 - 中文乱码?确保 Tomcat 或 Web 容器配置了 UTF-8 编码,且响应头 charset 正确(Spring Boot 默认已设)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











