java - 春季启动 RequestBody 不起作用
问题描述
我正在学习 Spring boot 的新手,并尝试创建一个接收 post 请求的控制器,但在我的测试过程中,控制器总是接收到 null 请求主体对象。请指导我做错了什么。
{
"user":{
"name":"teste",
"lastName":"teste"
} "contact":{
"email":"teste@teste.com",
"phone":"0123456789"
} "isMarried":true
}
Java 类:
@RequestMapping(method=RequestMethod.POST,value= "/user", consumes= MediaType.ALL_VALUE )
public ResponseEntity<Void> login(@RequestBody User user,
@RequestBody contact,
boolean isMarried){
System.out.println(user.getUsername());
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
sysout 为空,但 isMarried 有效:(
Java 实体:
@Entity
public class User{
@Id @GeneratedValue @Column(name= "id")
private Integer id;
@Column(name="name")
private String name;
@Column(name= "last_name")
private String lastName;
Getters and setters....
}
@Entity
public contact {
@Id @GeneratedValue @Column(name= "id")
private Integer id;
@Column(name="email")
private String email;
@Column(name= "phone")
private String phone;
Getters and setters....
}
解决方案
@RequestBody
注解应该代表整个请求体,它只绑定到请求中的一个对象。因此,您必须更改您的输入 json 格式、您的 post 方法签名,并创建一个封装类来将 User、Contact 和 IsMarried 数据保存在一起。
{
"user": {
"name": "teste",
"lastName": "teste"
},
"contact": {
"email": "teste@teste.com",
"phone": "0123456789"
},
"isMarried": true
}
@RequestMapping(method=RequestMethod.POST,value= "/user", consumes= MediaType.ALL_VALUE )
public ResponseEntity<Void> login(@RequestBody UserDetail userDetail){
System.out.println(userDetail.getUser.getUsername());
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
class UserDetail{
User user;
Contact contact;
boolean married;
}