我们刚刚发布了包含几个重要错误修复和一些增强功能的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 合同来解决这个问题:它引入了一个接受 ConstraintDescriptorHibernateConstraintValidatorInitializationContextinitialize() 方法,从而提供了对时钟提供者等的访问。

此合同标记为孵化。我们的最终目标是将其包含在 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 开始)。

或者,在 SourceForge 上提供了一个包含所有内容的发行包(TAR.GZZIP)。

如果您想在 WildFly 上利用此版本的最新功能,我们还提供了 WildFly 10.1WildFly 11.0 的 WildFly 补丁(等待与 Maven Central 同步)。您可以在此处了解如何应用这些补丁。

接下来是什么?

我们将继续发布维护版本,以快速修复用户报告的问题。

我们更新了我们的路线图,其中包括我们对未来的想法。如果您想加入我们,请毫不犹豫地选择一个任务,并与我们讨论。

反馈、问题、想法?

要联系,请使用常规渠道


返回顶部