@Valid
와 @Validated
의 차이를 모른 상태로 단순히 데이터 바인딩시 작성한 validation 어노테이션에 따라 검증을 하기 위해 지금까지 사용하였고 이에 대해 코드 리뷰 중 지적을 받아 다시 학습을 하게 되었다.
지금까지 내가 알고 있던 내용과 동일하다. 데이터 바인딩시 contraint(validation annotaion)에 따라 데이터를 검증한다.
public class UserRequestDto {
@NotBlank
@Size(min = 1, max = 50)
private String name;
@Min(1)
private Integer age;
@Size(max = 255)
private String hobby;
}
public ResponseEntity<ResponseDto> createUser(@Valid @RequestBody UserRequestDto userRequestDto) {
...
}
기능은 @Valid
와 동일하다. 단 validation 그루핑을 이용하여 원하는 속성만 유효성 검사를 할 수 있도록 만들 수 있다.
public interface Group1 {
}
public interface Group2 {
}
public class User {
private Integer id;
@NotEmpty(groups = {Group1.class})
private String account;
@NotEmpty(groups = {Group2.class})
private String password;
}
@PostMapping("/user/login")
public ResponseEntity login(@RequestBody @Validated(Group1.class) User user, BindingResult bindingResult) {
...
}