我有以下课程:
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?
答案 0 :(得分:1)
您使用的是哪个版本的Hibernate Validator?我检查了最新版本(5.1.0.Final)并且在那里工作。如果可以,我建议您升级。
您还可以在验证程序issue tracker中创建问题,报告您的问题,特别是您正在使用的Validator版本。
最后但并非最不重要的是,回答有关替代方案的问题。您可以使用Bean Validation元数据API来查找受约束的属性:
validator.getConstraintsForClass(Foo.class).getConstrainedProperties()
这将允许您仅处理受限制的属性。