TIL

[TIL] - spring annotation을 만들어 보았다.

봄봄로그 2023. 8. 8. 22:59

재밌다 필요한 검증을 어노테이션을 만들어 사용할 수 있다니

 

내가 필요한 것 : null이여도 되고 핸드폰자리 11자리만 체크하는 것

시도해본 것 : @Pattern(regexp = "^[\d]{11}+$")

 

@Pattern 어노테이션은 null 을 체크하기 때문에 내가 필요로 하는 것에 부합하지 않았다.....

 

그리하여 어쩔 수 없이 만들어 보게 된 어노테이션... 근데 좀 재밌었다 ㅎㅎ

 

총 두개의 class를 만든다.

1. 어노테이션으로 만들어 줄 인터페이스

2. 만들 어노테이션의 구현체

 

@Constraint(validatedBy = MobileNoValidator.class) // 구현체 class
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface MobileNo {
    String message() default "휴대폰 번호 자리 오류";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

MobileNo.java

 

public class MobileNoValidator implements ConstraintValidator<MobileNo,String> {

    @Override
    public void initialize(MobileNo constraintAnnotation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return StringUtils.isEmpty(value) || value.matches("^[\\d]{11}+$");
    }
}

 

MobileNoValidator.java

 

실제 validation 할 내용을 이 구현체 클래스에서 정의해주면 된다.

 

 

annotation 적용