Проверка типа Spring Hibernate с несколькими сообщениями об ошибках - PullRequest
0 голосов
/ 27 августа 2018

Мне интересно, возможно ли такое. У меня есть общий класс DTO под названием «Устройство». Устройство содержит идентификатор и IP. Я установил внутреннюю проверку регулярного выражения, чтобы проверить, правильно ли введен IP-адрес.

Но теперь я хочу провести еще одну проверку типа «проверить, не используется ли этот IP другим устройством» (как для обновления, так и для создания случаев).

Для этого я написал собственный ориентированный на тип ConstraintValidator, в котором я выполняю задачу проверки, нет ли другого устройства с данным IP.

Но с этого момента я хотел пойти дальше и получить несколько проверок и несколько сообщений об ошибках ответа от одного ConstraintValidator, выполняя случайные проверки объекта Device.

В этот момент я не смог найти, могу ли я переопределить сообщение об ошибке валидатора. Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Вы должны использовать Hibnate Bean Validation API, чтобы создать что-то вроде приведенного ниже кода.

HibernateValidatorConfiguration configuration = Validation
        .byProvider( HibernateValidator.class )
        .configure();

ConstraintMapping constraintMapping = configuration.createConstraintMapping();

constraintMapping
    .type( Car.class )
        .property( "manufacturer", FIELD )
            .constraint( new NotNullDef() )
        .property( "licensePlate", FIELD )
            .ignoreAnnotations( true )
            .constraint( new NotNullDef() )
            .constraint( new SizeDef().min( 2 ).max( 14 ) )
    .type( RentalCar.class )
        .property( "rentalStation", METHOD )
            .constraint( new NotNullDef() );

Validator validator = configuration.addMapping( constraintMapping )
        .buildValidatorFactory()
        .getValidator();

Взгляните на http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-programmatic-api

0 голосов
/ 27 августа 2018

Вы можете сделать это, используя следующую функцию, которую я использую для своего собственного API:

public static void setNewErrorMessage(String newErrorMessage, ConstraintValidatorContext context) {

    context.disableDefaultConstraintViolation();
    context.buildConstraintViolationWithTemplate(newErrorMessage)
            .addConstraintViolation();
}

Объект контекста здесь передается в функцию isValid любого ConstraintValidator реализующего класса.

Таким образом, вы сможете сделать что-то вроде:

if(hasError1()) {
     setNewErrorMessage(ERROR1_MESSAGE, context);
     return false;
}

if(hasError2()) {
     setNewErrorMessage(ERROR2_MESSAGE, context);
     return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...