2014-01-28 3 views
1

Я использовал метод addNode()ConstraintValidator.ContextConstraintViolationBuilder, чтобы добавить сообщение об ошибке в настраиваемый путь, но этот метод устарел. Однако, я использую новый метод addPropertyNode.Hibernate Custom Validator - addPropertyNode() Абстрактное исключение метода

Есть ли какая-то зависимость, которую мне не хватает?

Ниже приведен фрагмент сообщения об ошибке:

java.lang.AbstractMethodError: 
    org.hibernate.validator.internal.engine.ConstraintValidatorContextImpl$ErrorBuilderImpl 
     .addPropertyNode(Ljava/lang/String;) 
      Ljavax/validation/ConstraintValidatorContext$ConstraintViolationBuilder 
      $NodeBuilderCustomizableContext; 

Ниже приведен фрагмент валидатора для проверки поперечного поля с Hibernate Validator версии 4.3.1-Final

import org.springframework.beans.*; 
... 

    private String first; 
    private String second; 

    public boolean isValid(Object value, ConstraintValidatorContext context) { 
     BeanWrapper beanWrapper = new BeanWrapperImpl(value); 
     Object fieldObj = beanWrapper.getPropertyValue(first); 
     Object verifyObj = beanWrapper.getPropertyValue(second); 

     if (fieldObj.equals(verifyObj)) { 
      return true; 
     } 
     else { 
      context.disableDefaultConstraintViolation(); 
      context.buildConstraintViolationWithTemplate("message") 
       .addPropertyNode(fieldObj).addConstraintViolation(); 

      // ~ Depreciated, but works correctly~ 
      // context.buildConstraintViolationWithTemplate("message") 
      // .addNode(fieldObj).addConstraintViolation(); 

      return true; 
     } 
    } 

ответ

0

метод addPropertyNode() был добавлен в API проверки Bean 1.1. Хотя вы используете API BV 1.1, вы, похоже, используете более раннюю версию Hibernate Validator (4.x), которая только реализует Bean Validation 1.0. Вы должны обязательно использовать Hibernate Validator 5.x, который является эталонной реализацией Bean Validation 1.1.