我们刚刚发布了包含几个重要错误修复和一些增强功能的Hibernate Validator 6.0.5.Final版本。
对于使用Hibernate Validator 6.0.x的每个人来说,这是一个推荐的升级,并且它是6.0.4.Final的替代品。
新增功能
错误修复
Marko 注意到有一个可能导致随机 ClassCastException
的 令人烦恼的回归,它是在6.0.3.Final的一个性能补丁中引入的。如果你一次只验证几个具有少量属性的对象,这可能不会影响你(这就是为什么我们没有在我们的测试套件中发现它),但它确实使这次升级对每个人来说都很重要。
我们还修复了关于 @Email
验证器的另一个问题:它报告IDN ASCII域名(以 xn--
开头的域名)为无效,而它们是有效的。感谢Andreas Marienborg报告这个问题。
增强功能
@UniqueElements
约束
Tadhg Pearson 贡献了一个新的约束:@UniqueElements
。
此约束的目的是在集合中存在重复元素时引发违规。
@UniqueElements
private List<MyBean> beans;
考虑你使用JAX-RS反序列化XML和JSON Bean以及使用Hibernate Validator验证其内容的情况。XML和JSON集合被转换为List
。如果你然后将它们转换为Set
,重复的元素将被静默丢弃,而这可能不是你想要的。
此约束的目的是让Hibernate Validator能够在输入列表包含重复元素时引发违规。
时间验证容差
Daniel Wegener带着一个非常有趣的需求来到我们这里:在分布式系统中,获取当前时刻与验证之间可能存在轻微的延迟(例如,在客户端生成对象然后发送到后端服务器进行验证)。在这种情况下,你的时间约束(例如 @Future
或 @Past
)可能会失败。
他提出了在约束级别引入时间验证容忍度的想法,我们最终决定将其作为一个全局配置旋钮。
因此,你现在可以在初始化你的 ValidationFactory
时定义时间验证容忍度
ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
.configure()
.temporalValidationTolerance( Duration.ofMillis( 10 ) )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
有关此新功能的更多信息,请参阅我们的参考文档。
新的 HibernateConstraintValidator
合同
到目前为止,通过 ConstraintValidator#initialize()
可用的唯一参数是约束注解。这有点限制性,因为对于我们的某些验证器,我们需要额外的辅助工具和一些配置属性的访问。
我们创建了 HibernateConstraintValidator
合同来解决这个问题:它引入了一个接受 ConstraintDescriptor
和 HibernateConstraintValidatorInitializationContext
的 initialize()
方法,从而提供了对时钟提供者等的访问。
此合同标记为孵化。我们的最终目标是将其包含在 Bean Validation 的未来修订版中。
翻译更新
简化中文翻译由 周彦明 更新。
完整的变更日志
所有已修复问题的完整列表可以在我们的 JIRA 上找到。
获取 6.0.5.Final
要获取 Maven、Gradle 等的发布版本,请使用 GAV 坐标 org.hibernate.validator:{hibernate-validator|hibernate-validator-cdi|hibernate-validator-annotation-processor}:6.0.5.Final。注意,组 ID 已从 org.hibernate
(Hibernate Validator 5 及之前版本)更改为 org.hibernate.validator
(从 Hibernate Validator 6 开始)。
如果您想在 WildFly 上利用此版本的最新功能,我们还提供了 WildFly 10.1 和 WildFly 11.0 的 WildFly 补丁(等待与 Maven Central 同步)。您可以在此处了解如何应用这些补丁。
接下来是什么?
我们将继续发布维护版本,以快速修复用户报告的问题。
我们更新了我们的路线图,其中包括我们对未来的想法。如果您想加入我们,请毫不犹豫地选择一个任务,并与我们讨论。
反馈、问题、想法?
要联系,请使用常规渠道
-
用户论坛(使用问题,一般反馈)
-
问题跟踪器(错误报告,功能请求)
-
邮件列表(与开发相关的讨论)
-
Bean Validation 开发邮件列表(关于 Bean Validation 规范的讨论)