【问题标题】:Custom validation rules entered by a user for an object用户为对象输入的自定义验证规则
【发布时间】:2017-06-21 22:11:55
【问题描述】:

在我当前的项目中,我们的一项微服务有以下需求列表:

  1. 任何对象都可以具有自定义验证规则列表,并且对象之间的验证规则可能不同(甚至可能是一个对象具有唯一验证规则列表)
  2. 创建对象初始版本的用户可以从 UI 配置这些自定义验证规则
  3. 任何时候当对象发生某些特定事件(更改和更新)时,我们都需要验证更改不违反开始时输入的任何自定义验证规则
  4. 我们还应该有标准检查列表,例如日期范围检查、对象中某些项目和元素的数量

现在我们将保存所有对象的验证规则

  • 作为 JSON 对象,将包含验证规则的详细信息
  • 或序列化的Groovy对象(*Validator)

在这两种情况下,它都会保存在数据库中,并在需要检查验证规则列表并执行它们的任何时候使用。

我不确定这两个选项都是最好的,可能还有其他一些方法可以实现它。您是否知道任何有助于实施自定义验证规则的模式或方法

谢谢

【问题讨论】:

  • 最好使用一些声明性语言(您的选项中的 json)然后使用脚本,因为稍后您可以生成文档或对此声明进行一些可视化。并阅读您的要求(服务、对象定义/验证) - 您对 swagger.io 有何看法
  • 恕我直言,不管你使用的是一些“内置”的第三方库,比如 Hibernate 或你定制的 Json 描述,最后你都会有一堆 Java 代码片段。如果你需要一些核心逻辑(比如调用远程服务器或计算天空中的星星),在 Json pojos 中实现将非常棘手。这就是我投票支持 Groovy 实现的原因:1) 简单清晰的编码 2) 易于集成和良好的性能与已编译脚本的缓存 3) 提供自己的验证器库的可能性

标签: json validation groovy customization custom-validators


【解决方案1】:

对于自定义验证实现,我建议您使用 Java 验证 API。它与验证组结合使用非常强大。 您根据用户输入初始化 beans/适当的 POJO 实例,然后简单地调用验证,例如:Validator.validate(T object, java.lang.Class... groups)

【讨论】:

  • 我喜欢Java Bean Validation API,但不是我们可以使用它的情况。这个想法是用户可以为系统中的项目输入他的自定义验证规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 2021-08-19
  • 2017-04-11
  • 2018-02-18
  • 1970-01-01
  • 2017-12-01
  • 1970-01-01
相关资源
最近更新 更多