如果有一个带有某些字段的 Java 类,我想使用 Hibernate Validator 进行验证。
现在我希望我的用户能够在运行时配置进行哪些验证。
例如:
public class MyPojo {
...
@NotEmpty
String void getMyField() {
...
}
...
}
假设我想删除NotEmpty
检查或替换为Email
or CreditCardNumber
, 我该怎么做?有可能吗?我想这归结为在运行时更改注释......
正常情况下你是做不到的。
以下是我通过 Hibernate Validator 获得更多动态验证所做的工作。
- 延长
ClassValidator
class.
- 覆盖
getInvalidVaues(Object myObj)
方法。首先,打电话super.getInvalidValues(myObj)
,然后将挂钩添加到您的自定义验证中。
- 实例化您的自定义验证器并调用
getInvalidValues
验证。任何休眠注释验证都将在此时启动,并且您的自定义动态验证(注释不支持的任何内容)也将启动。
Example:
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 ...
}
}
因此,您的自定义验证代码可以包含诸如“如果用户配置了此验证,则执行此验证,否则执行此验证”等逻辑。您可能能够也可能无法利用支持休眠验证的相同代码,但无论哪种方式,您正在做的事情比休眠验证器的“正常”用例更加复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)