Dan*_*ski 5 java annotations runtime hibernate-validator
如果有一个包含某些字段的 Java 类,我想使用 Hibernate Validator 进行验证。现在我希望我的用户能够在运行时配置进行哪些验证。
例如:
public class MyPojo {
...
@NotEmpty
String void getMyField() {
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
比方说,我想删除的NotEmpty
检查或更换Email
或者CreditCardNumber
,我该怎么办呢?甚至有可能吗?我想这归结为在运行时更改注释...
正常情况下你是做不到的。
以下是我通过 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 ...
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您的自定义验证代码可以包含诸如“如果用户配置了此验证,则执行此验证,否则执行此验证”等逻辑。您可能或可能无法利用支持休眠验证的相同代码,但无论哪种方式,您正在做的事情比休眠验证器的“正常”用例更加复杂。
归档时间: |
|
查看次数: |
4495 次 |
最近记录: |