public class UserDto {
@NotBlank
private String name;
@Valid // 내부 객체도 검사하라고 명시해야 함!
private AddressDto address;
}
public class AddressDto {
@NotBlank
private String city;
}List <@Valid UserDto> userDto 같은 형태로 작성@PostMapping("/user")
public ResponseEntity<?> createUser(@RequestBody @Valid UserDto userDto) {
// userDto에 정의된 제약 조건을 검사함
} public interface OnCreate {}
public interface OnUpdate {}public class UserDto {
@NotBlank(groups = OnCreate.class) // 등록 시 필수
private String username;
@NotBlank(groups = OnCreate.class)
private String password;
@Email(groups = {OnCreate.class, OnUpdate.class}) // 둘 다 검사
private String email;
// getters/setters 생략
}@PostMapping("/create")
public ResponseEntity<?> createUser(@RequestBody @Validated(OnCreate.class) UserDto userDto) {
// OnCreate 그룹에 해당하는 제약 조건만 검사
...
}
@PutMapping("/update")
public ResponseEntity<?> updateUser(@RequestBody @Validated(OnUpdate.class) UserDto userDto) {
// OnUpdate 그룹만 검사
...
}@Service
@Validated // 클래스에 걸면 이 클래스 안의 메서드 파라미터에 대해 검사 가능
public class UserService {
public void saveUser(@Validated(OnCreate.class) UserDto userDto) {
// 유효성 검사 실행됨
}
}@PostMapping("/user")
public ResponseEntity<?> createUser(@RequestBody @Validated(OnCreate.class) UserDto userDto) {
// 그룹(OnCreate)에 해당하는 제약 조건만 검사함
}