@RequestBody注解用于将HTTP请求体中的JSON自动反序列化为Java对象,需配合Content-Type: application/json、Jackson配置及满足无参构造器和getter/setter要求的Java Bean使用。

Spring MVC 接收前端 JSON 请求参数,核心是用 @RequestBody 注解将请求体中的 JSON 自动反序列化为 Java 对象。前提是请求头 Content-Type 必须是 application/json,且项目已配置 Jackson(Spring Boot 默认内置)。
确保控制器方法正确使用 @RequestBody
前端发送的 JSON 数据会作为 HTTP 请求体(body)传入,不能用 @RequestParam 或 @PathVariable 获取。必须用 @RequestBody 标记参数:
- 参数类型建议是具体的 Java Bean 类(如
User),不要用Map或String(除非特殊需要) - 方法需声明为
POST、PUT或PATCH等支持请求体的 HTTP 方法 - 示例:
@PostMapping("/user")
public ResponseEntity<string> createUser(@RequestBody User user) {
System.out.println(user.getName()); // 自动绑定成功
return ResponseEntity.ok("success");
}</string>
前端发送 JSON 的常见写法(以 Axios 为例)
注意设置请求头,并确保数据是合法 JSON 字符串(Axios 会自动序列化):
- 不手动调用
JSON.stringify()(Axios 会处理) - 显式设置
headers: {'Content-Type': 'application/json'} - 示例:
axios.post('/user', {
name: '张三',
age: 25
}, {
headers: {
'Content-Type': 'application/json'
}
});
Java Bean 需要满足反序列化要求
Jackson 默认通过 getter/setter 或 public 字段绑定属性,因此:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 类必须有无参构造方法(默认就有,但若定义了带参构造,需显式补上无参构造)
- 字段名要与 JSON key 一致(区分大小写),或用
@JsonProperty("xxx")指定映射 - 可加
@JsonIgnore忽略不需要的字段 - 示例 Bean:
public class User {
private String name;
private Integer age;
<pre class="brush:php;toolbar:false;">// 必须有 getter/setter
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age; }
public void setAge(Integer age) { this.age = age; }}
调试失败时的排查要点
如果接收不到数据或报 400 错误,常见原因有:
- 前端没发 JSON(比如用了
application/x-www-form-urlencoded) - JSON 格式错误(多逗号、单引号、中文引号等)
- Java 字段类型不匹配(如 JSON 传
"age": "25",但 Java 是Integer) - 缺少 setter 方法,或字段是
final/private且无 setter - Spring 配置中未启用 Jackson(Spring Boot 默认启用,传统 Spring 需检查
MappingJackson2HttpMessageConverter)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










