@Valid 유효성검증시 EnumType 유효성 검사 방법 중 하나이다
Enum 그대로 파라미터 값으로 사용될 때 사용 가능하다.
@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;
}
}
@EnumValid(enumClass = {enum}.class, message = "타입을 확인해주세요")
private String type; // 기존 private UserType Type
기존에는 {enum}.class를 바로 받아 사용할 수 있지만 유효성 검사를 위해 String으로 받는다.