gpt4 book ai didi

java - 如何在运行时更改注释/Hibernate 验证规则?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:29:53 25 4
gpt4 key购买 nike

如果有一个包含某些字段的 Java 类,我想使用 Hibernate Validator 进行验证。现在我希望我的用户能够在运行时配置进行哪些验证。

例如:

public class MyPojo {
...

@NotEmpty
String void getMyField() {
...
}

...
}

假设我想删除 NotEmpty 检查或将其替换为 EmailCreditCardNumber,我该怎么做?有可能吗?我想这归结为在运行时更改注释...

最佳答案

你不能正常做。

以下是我为通过 Hibernate Validator 获得更多动态验证所做的工作。

  1. 扩展 ClassValidator 类。
  2. 覆盖 getInvalidVaues(Object myObj) 方法。首先,调用 super.getInvalidValues(myObj),然后将 Hook 添加到您的自定义验证。
  3. 实例化您的自定义 validator 并调用 getInvalidValues 进行验证。任何带注释的 hibernate 验证都将在此时开始,您的自定义动态验证(注释不支持的任何内容)也将开始。

例子:

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 ...
}

}

因此您的自定义验证代码可以包含逻辑,例如“如果用户配置了它,则执行此验证,否则执行那个”,等等。您可能会也可能不会利用支持 hibernate 验证的相同代码,但是无论哪种方式,您所做的都比 hibernate validator 的“正常”用例更复杂。

关于java - 如何在运行时更改注释/Hibernate 验证规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/750890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com