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

2023-11-30

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

例如:

public class MyPojo {
    ...

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

    ...
}

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


正常情况下你是做不到的。

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

  1. 延长ClassValidator class.
  2. 覆盖getInvalidVaues(Object myObj)方法。首先,打电话super.getInvalidValues(myObj),然后将挂钩添加到您的自定义验证中。
  3. 实例化您的自定义验证器并调用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(使用前将#替换为@)

如何在运行时更改注释/Hibernate 验证规则? 的相关文章

随机推荐

  • 如何在使用 .style 后隐藏列标签

    如何通过 pandas 样式隐藏列标签 有一个 hide index 方法可以删除索引行 不幸的是 hide column 标签会删除整个列 标题和数据 我只是想隐藏标题 谢谢 set table styles 您可以设置style对于桌子
  • 未定义的变量:Laravel 中的错误

    当我想在我的 laravel 项目中注册用户时 页面总是显示 未定义的变量 错误 查看 var www resources views auth register blade php 根据 Laravel 文档 errors应始终自动设置
  • 是否可以在范围报告等步骤之间获得诱惑报告的屏幕截图?

    我在用着allurereport 为我的测试生成报告 早些时候我曾经使用过extent报告 如您所知 在范围报告中 您可以添加日志和屏幕截图以创建它们 但在诱惑报告中 所有屏幕截图都将显示在步骤的末尾 My Question Is it p
  • Visual Studio 2015 RC3 TypeScript Intellisense 不再工作

    我正在使用 TypeScript 1 8 10 和 TypeScript Tools for VS2015 1 8 1 0 Beta 另外 我正在使用 VS2015 RC3 我尝试升级到 TypeScript 2 0 但遇到了完全相同的问题
  • 使用私有 API 扫描 iOS 7 上的网络 (SSID)

    是否可以通过在 iOS 7 越狱设备上使用私有 API 来获取周围网络的 SSID 列表 我知道关于MobileWiFi framework管理 iOS 上的 WiFi 功能 它取代了过时的 Apple80211 框架 这是 4 年前的答案
  • Magento SOAP 2 API 致命错误:过程“登录”不存在

    我收到 致命错误 程序 登录 不存在于 chroot home mystore mystore com html lib Zend Soap Server php 第 832 行 这就是错误的来源 soap this gt getSoap
  • Python:如何从 pandas 列中删除所有非数字值?

    我有一个数据框df像下面这样 Rooms BFS 0 3 5 4201 1 1 5 4201 2 NA 4201 3 NA 4201 4 5 5 4201 5 5 4201 6 4 5 4201 7 3 4201 8 4201 9 3 42
  • 在 R 正则表达式中获取文本段落中超过 1 个引用

    首先 找到引用 我想要这里的所有内容 内的文本 第二 在引文前摘录1句话 如果可能的话 我想通过查看 R 中的正则表达式来实现所需的输出 Example Yoyo He is sad Oh no Don t sad Yeah Testing
  • 如何使用ThreadException?

    我尝试使用 http msdn microsoft com en us library system windows forms application threadexception aspx Y399 但当我这样做时 throw new
  • Gradle 无法检测 osDetector 插件

    我正在将 OpenSSL 用于我的 Java GRPC 项目 该项目使用 gradle 我读了文档其中提到我们应该按照本节中提到的进行安全设置link 我已将 osDetector 插件包含在 build gradle 文件中 但是当我构建
  • 单击 Viewpager Xamarin Android

    我是 Xamarin Android 开发新手 我使用以下命令创建了图像滑块浏览器 现在我想单击该 ViewPager 的图像 我该如何实现呢 我已经尝试过这个但没有成功 viewpage mview FindViewById
  • 目标无法访问,标识符解析为 null

    我正在尝试在外部服务器上运行 j2EE 项目 项目是在 NetBeans 6 7 1 中制作的 当我从那里运行它时 一切都很顺利 我在 GlassFish v3 服务器上运行它 但是当我从 asadmin 脚本运行 GlassFish 并向
  • UWP C# 禁用方向更改动画

    是否可以禁用当手机旋转发生变化 从横向变为纵向或反之亦然 时执行的 屏幕旋转 动画 你需要使用DisplayInformation AutoRotationPreferences DisplayOrientations LandscapeF
  • :remote => true 和 url_for,如何做到这一点?

    我正在尝试使整个 div 标签可点击 我尝试使用的代码如下 当我添加 remote gt true 它会抛出 Too much args 错误 2 for 1 Code div div url for 不接受 remote gt true争
  • 从脚本启动 Spring boot 应用程序

    使用普通的 spring mvn 命令 我可以从命令行启动 spring boot 应用程序并使用 Control c 终止它 不过 我已经创建了一堆服务 稍后我将对其进行 dockerize 现在它们是由 mvn 生成的普通 java j
  • JSTree 拖放问题

    我将 JSTree 与 ASP net 一起使用 为树生成的 html 看起来像 ul li a href node 1 a li li a href node 2 a li li a href node 3 a li li a href
  • 升级到 JSF 2.2 后,#{cc.clientId} 在错误的组合中进行评估

    我有一个用 JSF 2 0 PrimeFaces 3 4 编写的标签库 现在我正在尝试更新到 JSF 2 2 和 PrimeFaces 4 0 但我意识到传递给组件的属性值是在复合组件中计算的 这会导致渲染的 id 错误 enum xhtm
  • Cygwin 和 Apache Pig - 令人困惑的伪 grunt>

    我正在尝试在运行 Vista 操作系统的 Windows PC 上安装 Apache Pig 以便将其用作学习工具 我不打算在这台机器上使用 Pig 进行任何严肃的数据处理 单节点 单 JVM x local设置是我想要的 我有 Windo
  • 始终显示 JavaFX ListView 的垂直滚动条

    ListView 似乎已经有一个滚动条 我希望滚动条始终可见 原因是因为我在其上放置了一个标题 并在滚动条和标题之间的角落放置了一个按钮 如何让ListView滚动条始终显示 您可以将其放入适当大小的 JScrollPane 中 并将 JS
  • 如何在运行时更改注释/Hibernate 验证规则?

    如果有一个带有某些字段的 Java 类 我想使用 Hibernate Validator 进行验证 现在我希望我的用户能够在运行时配置进行哪些验证 例如 public class MyPojo NotEmpty String void ge