@requestbody将json请求体转为java对象,@responsebody将java对象转为json响应体,二者依赖jackson实现双向转换,需确保jackson依赖完整且配置正确。

Spring MVC 中 @RequestBody 和 @ResponseBody 是处理 JSON 数据最常用的一对注解,它们依赖 Jackson(默认)自动完成 Java 对象与 JSON 的双向转换。关键前提是项目已引入 Jackson 依赖,且控制器方法签名和返回类型清晰明确。
确保 Jackson 依赖可用
Spring Boot 项目默认包含 spring-boot-starter-web,它已自动引入 jackson-databind;若为传统 Spring MVC 项目,需手动添加:
com.fasterxml.jackson.core:jackson-databindcom.fasterxml.jackson.core:jackson-corecom.fasterxml.jackson.core:jackson-annotations
缺少任一依赖可能导致 HttpMessageNotReadableException 或序列化失败。
@RequestBody:把请求体 JSON 转成 Java 对象
该注解用于方法参数,告诉 Spring 将 HTTP 请求体中的 JSON 字符串反序列化为指定类型对象。要求请求头必须是 Content-Type: application/json,且 JSON 结构需与目标类字段匹配(支持驼峰/下划线自动映射)。
- 推荐使用
public class User { private String username; private Integer age; }这类 POJO,字段名与 JSON key 一致或通过@JsonProperty显式指定 - 可配合
@Valid做校验,异常由@ControllerAdvice统一捕获 - 不建议直接用
Map<string object></string>接收,除非结构完全动态;更推荐定义具体 DTO 类提升可读性和类型安全
@ResponseBody:把 Java 对象转成 JSON 响应体
该注解用于方法返回值,让 Spring 将返回对象序列化为 JSON 并写入响应体。Spring Boot 中控制器类加 @RestController 相当于在每个方法上隐式加了 @ResponseBody。
- 返回
String时若未加@ResponseBody,Spring 会尝试当作视图名解析;加了才作为纯文本/JSON 输出 - 返回自定义对象时,Jackson 默认忽略
null字段,可通过@JsonInclude(JsonInclude.Include.NON_NULL)控制 - 如需统一格式(如
{ "code": 0, "data": {...} }),建议封装统一响应类,并在 Controller 层直接返回该类实例
常见问题与注意事项
实际开发中容易踩坑的地方包括:
- 前端发送的 JSON 字段名是
user_name,而 Java 类字段是userName:Jackson 默认支持下划线转驼峰(需配置snake_case策略或启用PropertyNamingStrategies.SNAKE_CASE) - 日期类型(
LocalDateTime)序列化失败:需注册JavaTimeModule,Spring Boot 2.2+ 已内置支持 - 中文乱码:确保 Tomcat 或 Web 容器配置了 UTF-8 编码,Spring MVC 配置中设置
spring.http.encoding.charset=UTF-8 - 嵌套对象或集合为空时想输出
[]而非null:可在字段上加@JsonInclude(JsonInclude.Include.NON_EMPTY)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











