自从Validator 5.1的第一个alpha版本发布以来已经有一段时间了,但正如俗话所说:“欲速则不达” :-) Hibernate宇宙中正在发生很多事情,在过去的几个月里,我们特别忙于诸如搜索OGM等项目。不用说,还有新的Hibernate网站。唉,如果能有更多的贡献者伸出援手(提示,提示)。

尽管如此,我们还是找到了时间来改进验证器,结果是Hibernate Validator 5.1.0.Beta1,它有一些新的功能和错误修复。最显著的功能是引入了@UnwrapValidatedValue以及相应的ValidatedValueUnwrapperSPI(见HV-819)。其理念是,在某些情况下,要验证的值包含在包装类型中,人们必须为每种约束类型和约束添加自定义ConstraintValidator实现。想想Java 8的Optional或JavaFX的Property类型。例如,在JavaFX中,您可能会有

@NotBlank
@UnwrapValidatedValue
private Property<String> name = new SimpleStringProperty( "Foo" );
这里的目的在于应用@NotBlank约束到字符串值,而不是实例。通过将name标注为Property,验证器引擎知道在验证之前必须解包值。为了能够这样做,您还需要注册一个@UnwrapValidatedValue的实现,该实现指定了这种解包的方式。您可以通过ValidatedValueUnwrappervalidation.xml作为提供者特定的属性(hibernate.validator.validated_value_handlers)或通过编程方式实现
Validator validator = Validation.byProvider( HibernateValidator.class )
        .configure()
        .addValidatedValueHandler( new PropertyValueUnwrapper() )
        .buildValidatorFactory()
        .getValidator();
PropertyValueUnwrapper在这个例子中是一个实现ValidatedValueUnwrapper,它告诉验证器引擎如何解包Property类型以及验证的值是哪种类型。后者对于约束验证器解析是必需的。有关更多信息,请参阅在线文档

还有什么值得提到的?感谢Brent Douglas对Hibernate Validator的配置和检测到一些潜在的内存泄漏 - 请参阅 HV-838HV-842。这些问题现在已修复。

还要感谢Victor Rezende dos Santos和Shin Sang-Jae。Victor发现了一个与巴西CPF约束相关的问题,导致其重构 HV-808,以及@ModCheck的弃用@ModCheck和引入了专门的@Mod10@Mod11约束作为替代。另一方面,Shin提供了ValidationMessages属性包的韩语翻译。

最后但同样重要的是,我们还通过减少元数据的内存消耗量来改进了内存占用(HV-589)。

总计解决了 29 个问题。在我看来,这并不算差,并且确实值得升级到Validator 5.1。

Maven工件位于JBoss Maven存储库中的GAV org.hibernate:hibernate-validator:5.1.0.Beta1 下,并且分发包可在SourceForge上找到。您可以通过Hibernate Validator 论坛或使用hibernate-validator标签在StackOverflow上发送反馈。

祝您享受!


返回顶部