2011-06-09 37 views
1

我正在使用Hibernate验证器。我有一个类级别的注释。它比较三个性质的平等。当执行验证时,我需要从返回的javax.validation.ConstraintViolation对象中获取PropertyPath。由于它不是单个字段,因此getPropertyPath()方法返回null。是否有另一种方法来查找PropertyPaths?如何从类级别注释冲突获得属性路径

这是我的注释实现 -

@MatchField.List({ 
@MatchField(firstField = "firstAnswer", secondField = "secondAnswer", thirdField = "thirdAnswer"), 
}) 

回答

2

你需要设置信息映射到当你确认,你想拒绝的属性。 Hibernate验证器没有办法自动地魔法确定自定义注释属性是属性路径。

public class MatchFieldValidator implements ConstraintValidator<MatchField, Object> { 

    private MatchField matchField; 

    @Override 
    public void initialize(MatchField matchField) { 
    this.matchField = matchField; 
    } 

    @Override 
    public boolean isValid(Object obj, ConstraintValidatorContext cvc) { 

    //do whatever you do 
    if (validationFails) { 
     cvc.buildConstraintViolationWithTemplate("YOUR FIRST ANSWER INPUT IS WRONG!!!"). 
         addNode(matchField.firstAnswer()).addConstraintViolation(); 
     cvc.buildConstraintViolationWithTemplate("YOUR SECOND ANSWER INPUT IS WRONG!!!"). 
         addNode(matchField.secondAnswer()).addConstraintViolation(); 
     //you get the idea 
     cvc.disableDefaultConstraintViolation(); 
     return false; 
    } 
    } 
}