Реализация аннотаций Java для проверки

1

Я хочу вызвать Validator из org.hibernate.validator.internal.constraintvalidators. вручную по значению, потому что я не могу аннотировать класс. Я сделал следующее:

LengthValidator validator = new LengthValidator();
validator.initialize(new Length() {
    @Override
    public Class<? extends Annotation> annotationType() {
        return null;
    }

    @Override
    public Class<? extends Payload>[] payload() {
        return null;
    }

    @Override
    public int min() {
        return min == null ? defaultMin : min;
    }

    @Override
    public String message() {
        return null;
    }

    @Override
    public int max() {
        return max == null ? defaultMax : max;
    }

    @Override
    public Class<?>[] groups() {
        return null;
    }
});
Boolean valid = validator.isValid(myValue.asText(), null));

Но Сонар не доволен:

У Lambdas и анонимных классов не должно быть слишком много строк

Поэтому я попытался реорганизовать этот код, выполнив @Length в пользовательском классе следующим образом:

public class StringLength implements Length {
    // All the methods overriden from @Length
}

но компилятор жалуется

Длина аннотации Length не должна использоваться в качестве суперинтерфейса для StringLength

Как я могу достичь того, что хочу?

Теги:
validation
hibernate-validator

1 ответ

1
Лучший ответ

Обратите внимание, что использование внутренних классов не рекомендуется, но если вы действительно этого захотите, вы можете использовать Hibernate Validator AnnotationFactory:

  AnnotationDescriptor<Length> descriptor = new AnnotationDescriptor<Length>( Length.class );
  descriptor.setValue( "min", 0 );
  descriptor.setValue( "max", 10 );
  ...

  Length lengthAnnotation = AnnotationFactory.create( descriptor );

Однако я не совсем уверен, что вы используете с помощью функции LengthValidator. Вы все еще не можете использовать платформу Validator, правильно? Если вы не можете аннотировать класс, не можете ли вы использовать XML-конфигурацию?

  • 0
    На самом деле я хочу проверить данные без схемы и не хочу переписывать валидаторы, которые отлично работают в Hibernate. Поэтому я не могу использовать конфигурацию XML, так как не знаю структуру данных для проверки. Вот почему я хочу создавать аннотации и вызывать валидаторы "динамически". Я собираюсь попробовать AnnotationDescriptor ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню