Get Enum Instance from Class<? extends Enum> using String value?

后端 未结 4 1569
时光取名叫无心
时光取名叫无心 2020-12-15 17:24

I\'m finding it difficult to put the exact question into words, so I\'ll just give an example.

I have two Enum types:

enum Shape {
    C         


        
4条回答
  •  天涯浪人
    2020-12-15 17:53

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

    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) {
        if(!valueList.contains(value.toUpperCase())) {
          return false;
        }
        return true;
      }
    
      @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());
        }
    
      }
    
    }
    

    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;
    

提交回复
热议问题