自定义注释显示为“此位置不允许使用注释@UniqueListOfString”

时间:2019-10-10 17:06:05

标签: java-annotations

我正在尝试一个自定义注释,如果设置了重复的元素,它将无法通过检查不区分大小写,从而会出错。

Set<String> h = new HashSet<>(Arrays.asList("a", "b", "A"));

因此,我创建了一个自定义批注

@Constraint(validatedBy = UniqueListOfString.CheckUniqueListOfString.class)
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface UniqueListOfString {

    static final String ERROR_MESSAGE = "LIst have duplicate element";

    String message() default ERROR_MESSAGE;

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

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

    public class CheckUniqueListOfString implements ConstraintValidator<ExpiryTimeConstraint, Set<String>> {

        private Boolean isUnique(Collection<?> data) {
            return data.size() == new HashSet<>(data).size();
        }

        public Set<String> setToUpperCase(Set<String> values) {
            return Stream.ofNullable(values).flatMap(Collection::stream).map(String::toUpperCase)
                    .collect(Collectors.toSet());
        }


        @Override
        public boolean isValid(Set<String> list, ConstraintValidatorContext context) {
            Boolean isValid = true;
            if (list != null)
                isValid = isUnique(list);
            if (!isValid) {
                list = setToUpperCase(list);
                context.buildConstraintViolationWithTemplate(ERROR_MESSAGE).addConstraintViolation();
                context.disableDefaultConstraintViolation();
            }
            return isValid;
        }
    }
}

但是,将其设置在字段顶部,显示错误。

@UniqueListOfString
private Set<String> addTempRoleCodes;

错误:-在此位置不允许使用注释@UniqueListOfString

允许不区分大小写是可以实现的,但是我想知道为什么它不起作用

0 个答案:

没有答案