Я пытаюсь создать пользовательскую аннотацию, где из-за ошибки, если в ней заданы дубликаты элементов, она не может быть проверена без учета регистра.
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 запрещена для этого местоположения
Можно допустить, чтобы регистр не учитывался, но я хочу знать, почему это не работает