Spring @Valid 适用于表单请求但不适用于 JSON 正文

Spring @Valid works for form requests but not with JSON body

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

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

}

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

UserDto(username=dsfssf, password=dsfsdgfsg, email=ssfds@dsgfsg.com)

dsfssf

dsfsdgfsg

false

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

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

我得到的只是

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

null

null

true

删除@ModelAttribute 否则它将在请求参数中查找数据。

@RequestBody 单独告诉 Spring 在请求正文中查找数据。