[Spring] custom valid annotaion

yoon·2024년 1월 11일

spring-boot

목록 보기
8/41
post-thumbnail

✅ 정규식을 이용한 phoneNumber annotation

1. annotation만들기

IntelliJ에서 new java class를 선택하면 annotation을 만들 수 있다.

@Constraint(validatedBy = {PhoneNumberValidator.class}) // 어떤 클래스로 validate를 진행할것이냐
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME) // 실행중에만 annotation 동작
public @interface PhoneNumber {
    String message() default "핸드폰 번호 양식에 맞지 않습니다. ex) 000-0000-0000";
    String regexp() default "^\\d{2,3}-\\d{3,4}-\\d{4}$";
    
    // 아래 두 부분은 없으면 에러가 발생한다. > 기존 어노테이션 참고
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}

2. validate를 진행할 클래스 만들기

public class PhoneNumberValidator implements ConstraintValidator<PhoneNumber, String> {

    private String regexp;

    @Override
    public void initialize(PhoneNumber constraintAnnotation) {
        this.regexp = constraintAnnotation.regexp(); //annotation에서 작성해준 default 정규식이 들어온다.
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // value = validate 해야하는 값 -> 핸드폰번호
        boolean result = value.matches(regexp); //=Pattern.matches(regexp, value) 파라미터 순서 확인
        return result;
    }
}

3. 사용하기

@pattern을 사용하여 정의해주었던 이전과 달리 @phoneNumber를 사용하여 재사용성이 높아졌다.

//    @Pattern(regexp = "^\\d{2,3}-\\d{3,4}-\\d{4}$",message = "번호 형식에 맞지 않음")
    @PhoneNumber
    private String phoneNumber;
profile
하루하루 차근차근🌱

0개의 댓글