본문 바로가기

Back-End/Spring Boot

Spring Boot Custom Validation만들기

Spring Boot에서 사용가능한 Validation

Annotaion 내용
@Size 문자 길이 측정
@NotNull null불가
@NotEmpty null, ""불가
@NotBlank null, "", " " 불가
@Past 과거 날짜
@PastOrPresent 오늘이나 과거 날짜
@Future 미래 날짜
@FutureOrPresent 오늘이거나 미래 날짜
@Pattern 정규식 적용
@Email 이메일 형식 확인
@Max 최대값
@Min 최소값
@AssertTrue/ False 별도 Logic 적용
@Valid 해당 Object Validation 실행

여러가지를 Spring Boot에서 제공을 해주지만 제공해주는 것 만으로는 부족할 때가 많다.

 

이럴 때 직접 Annotation을 만들어서 사용할 수 있다.

 

Spring Boot Validate Annotaion제작

 Custom Validation을 만들기 위해서는 일단 Annotation을 만들어준다.

 

간단하게 날짜가 들어오고 이를 yyyyMMdd의 형식이 맞는지 검증하는 Date Validation을 만들어 보도록 하겠다. 

@Constraint(validateBy={DateValidator.class})
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@RETENTION(RUNTIME)
public @interface DateValid {
    String message() default "yyyyMMdd의 형식에 일치하지 않습니다."

    Class<?> [] groups() default {};
    
    Class<? extends Payload>[] payload() default {};

    String pattern() default "yyyyMMdd";

}

 

그런다음

@Constraint(validateBy={DateValidator.class}) 에 있는 DateValidator를 만들어준다.  

// ConstraintValidator를 상속 받고 제네릭에는 사용할 어노테이션과 들어오는 값을 사용한다.
public class DateValidator implements ConstraintValidator<DateValid, String> {

    private String pattern;

    @Override
    public void initialize(DateValid constraintAnnotation) {
        this.pattern = constraintAnnotation.pattern();
    }

    @Ovveride
    // value는 들어온 값
    pulic boolean isValid(String value, ConstraintValidatorContext context) {
        try {
            LocalDate.parse(value, DateTimeFormatter.ofPattern(this.pattern));
        } catch(Exeption e) {
            return false;
        }
        return true;
    }
}

 

위와 같이 Annotation과 이를 검증할 Validator만 만들면 Custom Validation제작은 완료이다.

'Back-End > Spring Boot' 카테고리의 다른 글

Spring Boot Filter란  (2) 2024.06.16
Spring Boot @RestControllerAdvice를 이용한 예외 처리 방법  (0) 2024.06.09
AOP  (0) 2024.06.08
IoC와 DI  (0) 2024.06.08
Spring Boot Validation 사용  (0) 2024.06.07