@requestbody用于接收json并绑定为java对象,需配合@postmapping等注解、content-type: application/json请求头,参数须为dto类或map,字段名与json严格匹配,推荐使用lombok和jackson注解处理映射。

在 Java 的 Spring Boot 项目中,@RequestBody 是接收前端发送的 JSON 请求体并自动绑定为 Java 对象的核心注解。它适用于 POST、PUT 等携带完整 JSON 数据的请求,尤其适合处理嵌套对象、集合、日期等复杂结构。
确保控制器方法正确声明 @RequestBody
必须将 @RequestBody 加在方法参数上,且该参数类型需与前端 JSON 结构严格匹配(字段名、类型、嵌套层级一致)。Spring 默认使用 Jackson 进行反序列化。
- 参数不能是基本类型(如
String、int),应是自定义类或标准封装类(如Map、JSONObject) - 推荐使用具体 DTO 类而非
Map,便于校验、维护和 IDE 支持 - 方法需搭配
@PostMapping或@PutMapping,且请求头必须含Content-Type: application/json
编写结构匹配的 Java DTO 类
DTO 类字段名默认需与 JSON 键名完全一致(区分大小写),建议用 @Data(Lombok)或手动写 getter/setter。对特殊字段可加 Jackson 注解控制映射行为。
- 用
@JsonProperty("user_name")映射下划线命名的 JSON 字段到驼峰 Java 字段 - 用
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")处理时间字符串转LocalDateTime - 集合字段直接声明为
List<subitem></subitem>,Jackson 会自动解析嵌套数组 - 若 JSON 可能含空值或缺失字段,字段类型建议用包装类(
Integer而非int),并设默认值或加@JsonIgnoreProperties(ignoreUnknown = true)忽略多余字段
前端发送 JSON 的注意事项
前端必须以字符串形式发送 JSON,并设置正确的请求头,否则后端无法识别或解析失败。
- AJAX 示例:
fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(data) }) - 避免直接传 JS 对象(如
body: data),必须调用JSON.stringify() - 检查浏览器开发者工具 Network 面板:Payload 内容应为格式良好的 JSON 字符串,Headers 中
Content-Type确实为application/json
常见问题与调试技巧
解析失败时通常返回 400 Bad Request,需结合日志和响应体定位原因。
- 报错
HttpMessageNotReadableException:多数因 JSON 格式错误、字段类型不匹配(如字符串赋给 Integer)、时间格式不符 - 字段为 null:确认 JSON 中有对应 key;检查 DTO 是否缺少 setter;确认 Lombok 注解生效(编译后 class 应有 set 方法)
- 中文乱码:确保服务器端 Tomcat 或 Web 容器配置了 UTF-8 编码(Spring Boot 2.3+ 默认已支持)
- 快速验证:用 curl 测试:
curl -X POST http://localhost:8080/api/user -H "Content-Type: application/json" -d '{"name":"张三","age":25}'
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











