我正在尝试一个自定义注释,如果设置了重复的元素,它将无法通过检查不区分大小写,从而会出错。
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
允许不区分大小写是可以实现的,但是我想知道为什么它不起作用