我们很高兴宣布发布Hibernate Validator 5.2.0.Beta1。这次,Hibernate团队的多位成员(Davide,Emmanuel,Gunnar,Sanne 和 我)共同合作,使这次发布成为可能。感谢大家!
总共我们解决了 30 个问题。以下是亮点。
提供外部 ClassLoader 的能力
在以下几种情况下,Hibernate Validator需要加载资源或类
- XML 描述符(META-INF/validation.xml以及 XML 约束映射)
- 在 XML 描述符中指定名称的类
- ValidationMessages资源包
默认情况下,Hibernate Validator试图通过当前线程的上下文类加载器加载这些资源。如果这不起作用,Hibernate Validator的自己的类加载器将作为后备使用。对于不适用此策略的情况(例如OSGi等模块化环境),您现在可以在启动过程中提供外部类加载器
Validator validator = Validation.byProvider( HibernateValidator.class )
.configure()
.externalClassLoader( classLoader )
.buildValidatorFactory()
.getValidator();
Hibernate Validator的Apache Karaf features.xml
由于类加载器改进的副作用,我们能够在Apache Karaf和Hibernate Validator之间编写一些OSGi集成测试。这些测试本身并不重要,但我们决定发布所需的Karaffeatures.xml文件作为我们常规构建工件的一部分。您可以在这里查看此文件的第一个版本。
通过ConstraintMappingContributor程序化约束映射
在Hibernate Validator中,您可以通过特定的提供者功能,程序化定义约束映射。到目前为止,此功能与ValidatorFactory的程序化启动相关联。ValidatorFactory自身。然而,通常您并不是自己引导工厂,而是通过META-INF/validation.xml进行配置的默认工厂进行工作。在这些情况下,您现在可以通过实现一个:
public static class MyConstraintMappingContributor implements ConstraintMappingContributor {
@Override
public void createConstraintMappings(ConstraintMappingBuilder builder) {
builder.addConstraintMapping()
.type( Marathon.class )
.property( "name", METHOD )
.constraint( new NotNullDef() )
.property( "numberOfHelpers", FIELD )
.constraint( new MinDef().value( 1 ) );
builder.addConstraintMapping()
.type( Runner.class )
.property( "paidEntryFee", FIELD )
.constraint( new AssertTrueDef() );
}
}
ConstraintMappingContributor在这些情况下,您现在可以通过实现一个来添加一个或多个程序性约束映射。META-INF/validation.xml为了使此能够被引导过程选中,您需要指定贡献实现类的完全限定名称,并在.
中使用属性键
hibernate.validator.constraint_mapping_contributor带有资源包的ConstraintDefinitionContributor我们已经在Alpha1版本中引入了ConstraintDefinitionContributor,但它至今只允许您贡献约束。默认消息通过资源包并没有涉及。现在这种情况已经改变,您只需将ContributorValidationMessages.properties及其特定于地区的专业版本放置在JAR根目录下。Hibernate Validator将从类路径上找到的所有具有此名称的包中汇总条目。
我从哪里获得它?
此版本的Maven构件位于JBoss Maven仓库中(GAV org.hibernate:hibernate-validator:5.2.0.Beta1)和SourceForge上。
欢迎通过Hibernate Validator 论坛或使用hibernate-validator 标签在StackOverflow上提问。如果这些还不够,请查看您可以通过的其他方式联系我们联系方式。
祝您玩得开心!