Вы не можете применить аннотацию @Pattern
к чему-либо (java.util.UUID
), которое не является CharSequence
.Из аннотационной документации @Pattern
(подчеркивает мою):
Принимает CharSequence .нулевые элементы считаются действительными.
Более того, насколько я понимаю, вы пытаетесь расширить поведение обработчика аннотаций валидации, передав его новому определению аннотации.
Если выЕсли вы хотите выполнить более сложную проверку, просто создайте свою аннотацию без других аннотаций проверки - их объединение не работает таким образом.Должно быть что-то , чтобы распознавать аннотации и проверять их.
@Target({ElementType.FIELD})
@Retention(RUNTIME)
public @interface ValidUuid {
String message() default "{invalid.uuid}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
Теперь создайте валидатор, который реализует ConstraintValidator<ValidUuid, UUID>
и переопределите методы, выполняющие саму проверку.
public class UuidValidator implements ConstraintValidator<ValidUuid, UUID> {
private final String regex = "....." // the regex
@Override
public void initialize(ValidUuid validUuid) { }
@Override
public boolean isValid(UUID uuid, ConstraintValidatorContext cxt) {
return uuid.toString().matches(this.regex);
}
}
и применить аннотацию:
@ValidUuid
private UUID uuId;