首页 > 解决方案 > 如何将自定义注释应用于列表?

问题描述

我创建了一个注释以验证字符串字段的值(如枚举):

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = GenericStringSetValidator.class)
public @interface ValidStringValue {

    String message() default "Must be a valid value. Found: ${validatedValue}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    String[] values() default {};
}

以及注释使用的 GenericStringSetValidator :

public class GenericStringSetValidator implements ConstraintValidator<ValidStringValue, String> {

    private Set<String> validValues;

    @Override
    public void initialize(ValidStringValue constraint) {
            validValues = Arrays.stream(constraint.values())
                    .collect(toSet());
    }
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        if (value == null) return false;
        return validValues.contains(value);
    }
}

我已经在以下课程中使用它,没有任何麻烦:

public class SampleClass{
    private String id;
    @ValidStringValue(values = {"IN_PROGRESS", "COMPLETED", "DELETED"})
    private String status;
}

但我也想在其他类中使用它List<String>来验证List. 是否可以配置我的ValidStringValue界面以使其在 aString和 a上可用List<String>

public class SampleClassWithList{
    private String id;
    @ValidStringValue(values = {"A", "B", "C"})
    private List<String> sampleList;
}

非常感谢你的帮助 :)

标签: javajava-8annotations

解决方案


推荐阅读