使用@Enumerated注释验证字段

时间:2014-04-15 14:45:35

标签: java spring hibernate annotations

我需要使用@Valid注释验证实体。 我的实体的一个字段可以取一组数值,我想使用@Enumerated注释。 它可能需要值5,10,15,20和30。 我可以使用该注释处理它吗? 怎么样?

谢谢!

更新

我通过以下方式解决了我的问题:

我创建了一个注释@ValidateIntegerSet

@Documented  
@Retention(RetentionPolicy.RUNTIME)  
@Target({ElementType.METHOD,ElementType.FIELD,ElementType.CONSTRUCTOR,ElementType.PARAMETER,ElementType.ANNOTATION_TYPE})  
@Constraint(validatedBy=IntegerSet.class)
public @interface ValidateIntegerSet {

int[] acceptedValues();

String message() default "Il valore inserito non è tra quelli ammissibili"; 

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

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

我创建了一个IntegerSet类来执行验证

public class IntegerSet implements ConstraintValidator<ValidateIntegerSet, Integer> {  

private List<Integer> valueList;

@Override
public void initialize(ValidateIntegerSet constraintAnnotation) {
    valueList = new ArrayList<Integer>();
    for(int val : constraintAnnotation.acceptedValues()) {
        valueList.add(Integer.valueOf(val));
    }
}

@Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
    if(!valueList.contains(value)) {
        return false;
    }
    return true;
}
}

我以下列方式使用了新注释:

@ValidateIntegerSet(acceptedValues={5, 10, 15, 20, 30})

1 个答案:

答案 0 :(得分:0)

  

@Enumerated

肯定会有一些不起作用的东西。您需要自定义验证器,因为没有内置验证器。您可以尝试使用 @Pattern

Custom Validator