본문 바로가기

Java/Spring

Spring에서 Annotation으로 정의된 Validation 확인

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