【问题标题】:Is Hibernate Validator @NotNull always triggered first?Hibernate Validator @NotNull 总是先触发吗?
【发布时间】:2016-06-30 18:03:59
【问题描述】:
换句话说,如果我有两个约束,例如 @Email 和 @NotNull,@Email 验证器不会抛出 NPE?
这似乎很明显,但我问是因为我看到一些自定义验证器检查要验证的值是否为 null,如果是则返回 true。这似乎是个坏主意,因为如果开发人员忘记将 @NotNull 添加到 email 字段,那么电子邮件字段仍将通过验证。
TIA,
奥莱
【问题讨论】:
标签:
java
hibernate
validation
hibernate-validator
【解决方案1】:
为null 返回true 被认为是Bean 中的最佳实践
验证和所有内置约束都遵守它(在可能的情况下)。
Bean Validation 规范在3.4. Constraint validation implementation 部分中说:
虽然不是强制性的,但将
来自非空约束验证的核心约束验证
(例如,@Email 约束将在 null 对象上返回 true,
即不会处理@NotNull 验证)。
null 可以有多种含义,但通常用于表示一个
value 没有意义,不可用或只是未知。
在大多数情况下,对值的这些约束与其他约束是正交的
约束。例如,如果存在字符串,则必须是电子邮件,但
可以为空。将这两个关注点分开是一种很好的做法。