有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从类级注释冲突中获取属性路径

我正在使用Hibernate验证程序。我有一个类级别的注释。它比较了等式的三个属性。在执行验证时,我需要从javax获取PropertyPath。验证。返回了ConstraintViolation对象。由于它不是单个字段,getPropertyPath()方法返回null。有没有其他方法可以找到PropertyPaths

这是我的注释实现-

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

共 (1) 个答案

  1. # 1 楼答案

    您需要将消息设置为映射到您希望在验证时拒绝的属性。Hibernate Validator无法自动神奇地发现自定义注释属性是属性路径

    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;
        }
      }
    }