【问题标题】:Hibernate validator - conditionally apply validatorHibernate 验证器 - 有条件地应用验证器
【发布时间】:2012-01-12 14:20:35
【问题描述】:

我只想在另一个字段为 false 时应用某些 @NotBlank 注释。在我当前的项目中,我们必须使用休眠验证器,因此没有公共验证 + valang 可用于解决此问题。

由于我不太喜欢创建多个自定义注释来解决应该是一件容易的事情(有点沮丧,这不是 JSR-303 规范的一部分)我想知道是否有人知道一种可以接受的方法做到这一点。我找到了一个可以做到这一点的罐子,但那是为 hibernate 3 准备的。由于这些变化......

【问题讨论】:

  • 你有最好的方法吗?

标签: validation hibernate-validator


【解决方案1】:

对于这种情况,建议的方法是使用类级别约束而不是字段或属性级别。

请参考Hibernate Validator Docs

我现在很烦。我有这样的场景并尝试了类似 @NotEmpty(depends="anotherField") 的方法,但完全失败了。

也许其他一些成员知道另一种方法来做到这一点,但现在,我正在做 Hibernate Validator 说要做的事情。

【讨论】:

  • 老实说,在我看来,缺乏对这种场景的支持是我对 JSR-303 规范的不满之一。并且类级别的约束非常好,但它们在放置和自定义错误消息方面并没有给您同样的灵活性。
  • 同意,但我认为这只是关注点分离的问题。字段验证专门针对一个字段/属性(空、null、大于 X、小于 Y)。这些是不可变的验证,不应该依赖于系统的任何其他部分。你永远不会对此感到困惑。否则,有人可能会在一个领域创造出疯狂的验证。
  • @Beccari 如果我的情况是如果 field1 = true 然后验证另一个。假设我的另一个字段是一个类对象,现在我只是在上面使用@Valid。如果我要做这种 if-else 之类的事情,我将不得不自己为我的其他领域编写验证机制,对吗?我不能再使用@Valid
  • @Kraken 我相信如此。如果您从对象字段中删除 @Valid ,则验证将永远不会在其字段上“输入” - 例如进行 @NotNull 验证。如果你想验证这个对象字段,你的类级验证将不得不处理它,根据 field1 = true 手动调用 validator.validate()。
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2022-11-20
  • 2019-03-26
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多