如果属性没有规则,Hibernate的validateValue()会抛出非法的参数异常吗?

时间:2014-03-10 22:04:18

标签: java hibernate hibernate-validator

我有以下课程:

class Foo
{
   @NotEmpty
   private String member1;

  @NotEmpty
  private String member2;

  private String member3; //this one is optional, so has no rules
}

我有一个库,我添加了所有属性名称和相应的UI字段,每次UI的onChange事件发生时,我在该字段的给定字段名称上调用validateValue()来验证它并显示错误/成功消息。

问题是,在这种情况下我没有member3的规则,如果我尝试通过这样做来验证它:

String value = event.getValue(); //whatever the new value is now
validator.validateValue(Foo.class, "member3", value);

在第二行,我得到以下例外:

Caused by: java.lang.IllegalArgumentException: member3 is not a valid property of 
com.xxx.Foo

同一类中的member1member2都经过正确验证。

我可以做些什么来避免在没有设置任何规则的字段上获得此异常?如果没有,是否有一种方法(没有反射或为每个字段手动指定)来检查规则是否没有设置规则,所以我可以避免在其上调用validateValue?

1 个答案:

答案 0 :(得分:1)

您使用的是哪个版本的Hibernate Validator?我检查了最新版本(5.1.0.Final)并且在那里工作。如果可以,我建议您升级。

您还可以在验证程序issue tracker中创建问题,报告您的问题,特别是您正在使用的Validator版本。

最后但并非最不重要的是,回答有关替代方案的问题。您可以使用Bean Validation元数据API来查找受约束的属性:

validator.getConstraintsForClass(Foo.class).getConstrainedProperties()

这将允许您仅处理受限制的属性。