Spring @Valid适用于表单请求,但不适用于JSON主体

时间:2017-06-13 18:44:29

标签: json spring validation spring-mvc spring-validator

我有一个简单的数据传输类

@Data
public class UserDto {

    @NotNull
    @NotEmpty
    private String username;

    @NotNull
    @NotEmpty
    private String password;

    @NotNull
    @NotEmpty
    private String email;
}

在我的控制器中,我想使用该对象。

@PostMapping("/users/create")
public ResponseEntity<Object> createUser(@ModelAttribute("UserDto") @RequestBody @Valid UserDto accountDto, BindingResult bindingResult, HttpServletRequest request)  {
    System.out.println(accountDto);
    System.out.println(accountDto.getUsername());
    System.out.println(accountDto.getPassword());
    System.out.println(bindingResult.hasErrors());

    return new ResponseEntity<>("success", HttpStatus.OK);

}

我正在使用邮递员来测试我的api。将请求作为formx-www-form-urlencoded发送时,请求正常。我得到以下输出:

  

UserDto(用户名= dsfssf,密码= dsfsdgfsg,电子邮件=ssfds@dsgfsg.com)

     

dsfssf

     

dsfsdgfsg

     

但是,将请求作为JSON对象发送时,如

{"username": "ssss", "password": "test", "email": "samauaa@sdfsdfsd.com" }

我得到的只是

  

UserDto(username = null,password = null,email = null)

     

     

     

1 个答案:

答案 0 :(得分:2)

删除@ModelAttribute或者它会在请求参数中查找数据。

单独

@RequestBody告诉Spring在请求体内查找数据。