你不能正常做。
这是我通过 Hibernate Validator 获得更多动态验证所做的工作。
- 扩展
ClassValidator
类。
- 覆盖
getInvalidVaues(Object myObj)
方法。首先,调用super.getInvalidValues(myObj)
,然后将钩子添加到您的自定义验证中。
- 实例化您的自定义验证器并调用
getInvalidValues
验证。任何休眠注释验证都将在此时开始,您的自定义动态验证(注释不支持的任何内容)也将开始。
例子:
public class MyObjectValidator extends ClassValidator<MyObject>
{
public MyObjectValidator()
{
super(MyObject.class);
}
public InvalidValue[] getInvalidValues(MyObject myObj)
{
List<InvalidValue> invalids = new ArrayList<InvalidValue>();
invalids.addAll(Arrays.asList(super.getInvalidValues(myObj)));
// add custom validations here
invalids.addAll(validateDynamicStuff(myObj));
InvalidValue[] results = new InvalidValue[invalids.size()];
return invalids.toArray(results);
}
private List<InvalidValue> validateDynamicStuff(MyObject myObj)
{
// ... whatever validations you want ...
}
}
因此,您的自定义验证代码可以包含诸如“执行此验证,如果用户配置它,否则执行该验证”等逻辑。您可能能够也可能无法利用支持休眠验证的相同代码,但无论哪种方式,您正在做的更多涉及休眠验证器的“正常”用例。