spring mvc 通过 @requestbody 注解和 jackson 的 httpmessageconverter 自动反序列化 json 为 java 对象,需引入 jackson-databind 依赖、设置 content-type: application/json 请求头及合法 json 请求体,并配合匹配的 java bean 和 controller 方法;还可通过 objectmapper 全局配置反序列化行为。

Spring MVC 通过 @RequestBody 注解 + 默认注册的 HttpMessageConverter(如 Jackson2ObjectMapperBuilder 配置的 MappingJackson2HttpMessageConverter)即可自动将请求体中的 JSON 数据反序列化为 Java 对象,无需手动解析。
确保项目已引入 Jackson 依赖
Spring Boot 项目默认包含 spring-boot-starter-web,它会自动拉取 jackson-databind 和相关模块。若为传统 Spring MVC 项目,请确认 pom.xml 中有:
<dependency><groupid>com.fasterxml.jackson.core</groupid><artifactid>jackson-databind</artifactid></dependency>
缺少该依赖会导致 415 Unsupported Media Type 或反序列化失败。
前端发送标准 JSON 请求
必须满足两个前提:
- 请求头
Content-Type: application/json - 请求体为合法 JSON 字符串(不能是表单格式或未编码的字符串)
例如使用 Axios:
axios.post('/api/user', { name: '张三', age: 25 })
.then(res => console.log(res.data));
若用原生 fetch,需显式设置 header:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
fetch('/api/user', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: '李四', age: 30 })
});
后端 Controller 正确接收
定义一个与 JSON 结构匹配的 Java Bean:
public class User {
private String name;
private Integer age;
// getter/setter(Lombok @Data 可简化)
在 Controller 方法中使用 @RequestBody:
@PostMapping("/api/user")
public ResponseEntity<string> createUser(@RequestBody User user) {
System.out.println(user.getName() + ", " + user.getAge());
return ResponseEntity.ok("success");
}</string>
注意:@RequestBody 不支持 GET 请求(无请求体),且不能与 @RequestParam 混用于同一参数;若需同时接收路径/查询参数,可分开声明。
自定义反序列化行为(可选)
如需处理日期格式、空字符串转 null、忽略未知字段等,可通过配置 ObjectMapper 实现:
- 全局配置(Spring Boot):在
application.yml中添加
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
serialization-inclusion: NON_NULL
default-property-inclusion: NON_NULL
- 或 Java Config 方式注册自定义
ObjectMapper
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
}
这样就能灵活控制 JSON 到对象的转换逻辑,而无需改动每个接口。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










