我有以下类(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
同一类中的 member1
和 member2
均已正确验证。
我可以采取什么措施来避免在没有设置任何规则的字段上出现此异常?如果没有,是否有一种方法(无需反射或为每个字段手动指定)来检查规则是否没有设置规则,这样我就可以避免在其上调用 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/