Java String validation using enum values and annotation

后端 未结 8 1497
暖寄归人
暖寄归人 2020-11-30 23:47

I want to validate a string against a set of values using annotations.

What I want is basically this:

@ValidateString(enumClass=com.co.enum)
String d         


        
8条回答
  •  失恋的感觉
    2020-12-01 00:22

    So here is the code being using Spring validation and works great for me. Full code is given below.


    @EnumValidator annotation definition:

    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 javax.validation.Constraint;
    import javax.validation.Payload;
    import javax.validation.ReportAsSingleViolation;
    import javax.validation.constraints.NotNull;
    
    @Documented
    @Constraint(validatedBy = EnumValidatorImpl.class)
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.FIELD)
    @NotNull(message = "Value cannot be null")
    @ReportAsSingleViolation
    public @interface EnumValidator {
    
      Class> enumClazz();
    
      String message() default "Value is not valid";
    
      Class[] groups() default {};
    
      Class[] payload() default {};
    
    }
    


    Implementation of the above class:

    import java.util.ArrayList;
    import java.util.List;
    
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    
    public class EnumValidatorImpl implements ConstraintValidator {
    
        List valueList = null;
    
        @Override
        public boolean isValid(String value, ConstraintValidatorContext context) {
            return valueList.contains(value.toUpperCase());
        }
    
        @Override
        public void initialize(EnumValidator constraintAnnotation) {
            valueList = new ArrayList();
            Class> enumClass = constraintAnnotation.enumClazz();
    
            @SuppressWarnings("rawtypes")
            Enum[] enumValArr = enumClass.getEnumConstants();
    
            for (@SuppressWarnings("rawtypes") Enum enumVal : enumValArr) {
                valueList.add(enumVal.toString().toUpperCase());
            }
        }
    
    }
    


    Usage of the above annotation is very simple

     @JsonProperty("lead_id")
     @EnumValidator(
         enumClazz = DefaultEnum.class,
         message = "This error is coming from the enum class",
         groups = {Group1.class}
     )
     private String leadId;
    

提交回复
热议问题