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

标签 java hibernate hibernate-validator

我有以下类(class):

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?

最佳答案

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

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

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

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

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

关于java - 如果属性没有规则,Hibernate 的 validateValue() 会抛出非法参数异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312312/

相关文章:

hibernate-validator - 如何在 Hibernate 验证器中添加自定义错误消息

Java RMI 客户端遇到 ClassCastException

Java Cucumber DataTable 使用 Cucumber diff() 进行比较

mysql - 使用多个where子句在spring data jpa中删除

hibernate-validator - 导入org.hibernate.validator.ClassValidator无法解析

validation - 使用 Hibernate Validator (JSR 303) 进行跨领域验证

java - 如何在Eclipse中的Maven项目中编译并运行Java应用程序?

java - 如何将 6020494385.89982 字符串值转换为 double

java - JPA Criteria API 检查关联集合是否是另一个集合的子集

java - 使用 Spring HibernateTemplate。如何按ID删除?