어노테이션 기반 유효성 검사기 만들기

현재 회사에서 고객 결제 기록을 가져올 때 날짜 필터링을 해야 하는데, 어노테이션 기반으로 커스텀 검사기를 작성하기 위해 공부한 것을 적어본다. 여기 예제에서는 전화번호가 유효한지 확인하는 커스텀 유효성 검사기를 만들어 본다.

의존성 추가

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.10.Final</version>
</dependency>

1 커스텀 어노테이션 생성하기

  • @Constraint: 어떤 검사기에 의해 검사될 건지 지정한다.

  • @Targetarrow-up-right: 어노테이션을 어느 레벨에서 사용할 수 있을지 정할 수 있다.

@Documented
@Constraint(validatedBy = MyValidator.class)
@Target( { ElementType.METHOD, ElementType.FIELD }) 
@Retention(RetentionPolicy.RUNTIME)
public @interface ContactNumberConstraint {
    String message() default "Invalid phone number"; // UI에서 보여질 에러 메시지
    Class<?>[] groups() default {}; // 스프링 표준 지키기 위해 따라오는 boilerplate 코드 
    Class<? extends Payload>[] payload() default {}; // 스프링 표준 지키기 위해 따라오는 boilerplate 코드  
}

어노테이션을 사용해보자.

변수에 만든 어노테이션를 붙혀준다.

1.1 컨트롤러로 넘어온 값 검증하기

컨트롤러에서, @Valid 를 사용해서, 검증할 객체를 지정한다. BindingResult 는 에러가 날 경우 잡기 위해 사용되었다.

1.2 테스트 작성

2 클래스 전체 유효성 검사 하기

필드가 아닌 클래스 전체의 값들이 유효한지 체크해보자.

예시는, 회원 가입시 두번째로 입력된 이메일과 비번이 첫번째것들 일치하는지 검증을 목적으로 한다.

사용될 검증기에 ConstraintValidator<어노테이션명, 검증객체> 를 impl 한다.

검증될 객체에 validator 붙혀보자.

password와 email이 올바른지 검증될 것이다.

2.1 컨트롤러로 넘어온 값 검증하기

NewUserForm를 컨트롤러에서 받을때 검증이 수행될수 있게 @Valid 삽입한다.

2.2 테스트 작성

참고자료

  • https://www.baeldung.com/spring-mvc-custom-validator

Last updated