Spring을 사용하면서 DTO를 정의하고 DTO의 필드에 validation을 추가한 경우에, 필요에 따라 validation을 직접 호출해야하는 경우가 발생할 수 있다. 예를 들어 카프카에서 사용하는 DTO의 필드 값이 유효한지 확인해야 하는 경우, 일반적인 Controller API의 경우를 따를 수 없었다. 이에 stack overflow에 해결책이 올라온 것을 확인하였고, 이를 적용하였다.
예를 들어 사용자 정보를 생성하는 Request에 대해 아래와 같이 DTO를 정의하였다.
@Getter
@AllArgsConstructor
public class UserCreateRequestDTO {
@NotEmpty(message = "name is mandatory value.")
private String name;
@NotNull(message = "age is mandatory value.")
private Integer age;
@NotEmpty(message = "email is mandatory value.")
private String email;
@NotEmpty(message = "mobileNum is mandatory value.")
private String mobileNum;
}
사용자의 이름, 나이, 이메일, 핸드폰 전화번호 등을 입력받게 되어 있고, 이 값들은 모두 비어 있어서는 안되는 값이다. 이와 같이 정의된 유효성을 확인하려면, 아래와 같이 Validator를 명시적으로 생성하여 확인하면 된다.
public class UserConsumerHandler {
public void handle(UserCreateRequestDTO userCreateRequestDTO) {
final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
final Set<ConstraintViolation<UserCreateRequestDTO>> violations = validator.validate(userCreateRequestDTO);
if (!violations.isEmpty()) {
throw new ConstraintViolationException(violations);
}
...
}
}
만일 유효성을 검증하여 error가 확인되면 ConstraintViolation Set에 error가 발생한 데이터가 추가되게 된다. 이 값을 어떻게 처리할 것인가는 구현에 따라 다를 듯 하다.
참고
https://stackoverflow.com/questions/19190592/manually-call-spring-annotation-validation
'Java > Spring' 카테고리의 다른 글
Spring AOP: Aspect Oriented Programming with Spring (0) | 2020.07.15 |
---|---|
Custom Constraint (0) | 2020.07.07 |
@Transactional Attribute (0) | 2020.06.29 |
Spring StopWatch (0) | 2020.04.28 |
Spring 프로젝트 생성시 maven CoreException issue (4) | 2018.09.16 |