首页 > 解决方案 > 春季启动 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.... 
}

标签: javaspringspring-mvcspring-boot

解决方案


@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;
}

推荐阅读