自定义注解校验枚举入参
package com.migu.redstone.quanyi; import org.apache.commons.lang.StringUtils; import javax.validation.Constraint; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import javax.validation.Payload; import java.lang.annotation.Annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) @Constraint(validatedBy = EnumValid.EnumValidatorHandle.class) public @interface EnumValid { String[] enums(); Class[] sourceClass() default {}; boolean isNull() default false; String message() default "入参值不在正确枚举中"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; class EnumValidatorHandle implements ConstraintValidator<EnumValid, Object>, Annotation { private List<String> enums = new ArrayList<String>(); private boolean isNull = false; @Override public Class<? extends Annotation> annotationType() { return null; } @Override public void initialize(EnumValid constraintAnnotation) { this.isNull = constraintAnnotation.isNull(); String[] enums = constraintAnnotation.enums(); if (enums.length == 0) { Class<? extends IEnumSource>[] classes = constraintAnnotation.sourceClass(); if (classes.length>0){ IEnumSource explicitInterface = SpringContextUtil.getBean(classes[0]); this.enums = explicitInterface.source(); } } else { this.enums = Arrays.asList(enums); } } @Override public boolean isValid(Object value, ConstraintValidatorContext context) { if (value instanceof String) { return (isNull && StringUtils.isBlank((String) value)) || (StringUtils.isNotBlank((String) value) && enums.contains(value)); } else { return (isNull && Objects.isNull(value)) || (Objects.nonNull(value) && enums.contains(value.toString())); } } } /** * 动态枚举实现该接口 */ public static interface IEnumSource { List<String> source(); } }