当前位置: 首页 > 知识库问答 >
问题:

Hibernate自定义验证器-addPropertyNode()抽象方法异常

轩辕瑞
2023-03-14

我使用了ConstraintValidator.ContextConstraintViolationBuilderAddNode()方法将错误消息添加到自定义路径,但不推荐使用此方法。但是,当我使用新方法AddPropertyNode时,我会得到一个AbstractMethoderRor

是不是我缺少了一些依赖?

下面是错误消息的片段:

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

下面是使用Hibernate validator Version4.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;
        }
    }

共有1个答案

申颖逸
2023-03-14

在Bean Validation 1.1 API中添加了addPropertyNode()方法。当您使用BV1.1 API时,您似乎使用了Hibernate Validator(4.x)的早期版本,该版本仅实现Bean验证1.0。您应该确保使用Hibernate Validator5.x,它是Bean Validation1.1的参考实现。

 类似资料:
  • 我试图使用注释和ConstraintValidator接口创建自定义bean验证。目的是使模型的名称独一无二。我不知道为什么,但是当我提交表单以便添加产品时,会抛出NullPointerException。 我的root-context.xml文件:

  • 我已经为此斗争了好几天,我已经阅读了这里的所有讨论,但没有解决方案...... 我有一个自定义约束… 独一无二.java 这是由UniqueConstraintValidator使用的.java 现在,我的模型有这个注释,我需要在其中验证字段的唯一性 现在,我知道自定义注释在更新现有对象时不起作用,但是现在我需要了解它是如何工作的。假设我们想要添加一个新对象。 当我试图保存一个已经存在的值时,我得

  • 主要内容:自定义验证器类实例我们可以在JSF中创建自己的自定义验证器。以下列表是在JSF中创建自定义验证器的步骤。 通过实现接口创建一个验证器类。 实现上面接口的方法。 使用注释为自定义验证器分配唯一的ID。 自定义验证器类实例 打开 NetBeans IDE 创建一个Web工程:CustomValidator,其目录结构如下所示 - 创建以下文件代码,文件:index.xhtml 的代码内容如下所示 - 文件:result

  • 我正努力在我的Android应用程序中实现一个自定义验证器。我想在列表视图中显示一些从服务器检索到的建议(它可以正常工作),即使在我的AutoCompleteTextView中不以相同的字母开头。 所以,也就是说,如果我写“n”,我希望得到服务器响应,它是“r”。因此,我尝试实现一个验证器,设置示例,该示例控制服务器响应是否为空。 建议?提前致谢

  • 我们可以在JSF中创建自己的Custom验证器。 在JSF中定义自定义验证器分为三个步骤。 步 描述 1 通过实现javax.faces.validator .Validator接口创建验证器类。 2 实现上述接口的validate()方法。 3 使用注释@FacesValidator为自定义验证程序分配唯一ID。 步骤1:创建Validator类:UrlValidator.java public

  • 表单验证发生在数据验证之后。如果你需要定制化这个过程,有几个不同的地方可以修改,每个地方的目的不一样。表单处理过程中要运行三种类别的验证方法。它们通常在你调用表单的is_valid() 方法时执行。还有其它方法可以触发验证过程(访问errors 属性或直接调用full_clean() ),但是通用情况下不需要。 一般情况下,如果处理的数据有问题,每个类别的验证方法都会引发ValidationErr