@EnumValid

아이스__아메리·2023년 3월 27일
0

@Valid 유효성검증시 EnumType 유효성 검사 방법 중 하나이다
Enum 그대로 파라미터 값으로 사용될 때 사용 가능하다.

  1. config 패키지에 두개의 파일 생성
@Documented
@Target({ METHOD, FIELD, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = {EnumValidator.class})
public @interface EnumValid {
    String message() default "Enum에 없는 값입니다.";

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

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

    Class<? extends java.lang.Enum<?>> enumClass();

    boolean ignoreCase() default false;
}
public class EnumValidator implements ConstraintValidator<EnumValid, String> {
    private EnumValid annotation;

    @Override
    public void initialize(EnumValid constraintAnnotation) {
        this.annotation = constraintAnnotation;
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        if (ObjectUtils.isEmpty(value)) return false;

        Object[] enumValues = this.annotation.enumClass().getEnumConstants();
        if (enumValues != null) {
            for (Object enumValue : enumValues) {
                if (value.equals(enumValue.toString())
                        || (this.annotation.ignoreCase() && value.equalsIgnoreCase(enumValue.toString()))) {
                    return true;
                }
            }
        }
        return false;
    }
}
  1. dto에 달기
@EnumValid(enumClass = {enum}.class,  message = "타입을 확인해주세요")
private String type; // 기존 private UserType Type

기존에는 {enum}.class를 바로 받아 사용할 수 있지만 유효성 검사를 위해 String으로 받는다.

profile
츠케멘 좋아

0개의 댓글