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。将请求作为 form
或 x-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 在请求正文中查找数据。
我有一个简单的数据传输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。将请求作为 form
或 x-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 在请求正文中查找数据。