Пользовательская аннотация, показывающая "аннотация @UniqueListOfString запрещена для этого местоположения" - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать пользовательскую аннотацию, где из-за ошибки, если в ней заданы дубликаты элементов, она не может быть проверена без учета регистра.

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 запрещена для этого местоположения

Можно допустить, чтобы регистр не учитывался, но я хочу знать, почему это не работает

...