Hibernate Validator 6将成为Bean Validation 2.0的参考实现。这个Alpha2版本与Bean Validation规范2.0.0.Alpha2版本相协调。

它也是一个游乐场,用于验证Bean Validation规范的未来增强,因此对这里提出的主题的反馈非常受欢迎!

注意,Hibernate Validator 6需要JDK 8或更高版本。

如果您错过了Alpha1版本,在继续阅读之前查看其公告可能对您有益。

自Alpha1以来的新内容

改进的容器元素验证支持

容器元素验证支持是Bean Validation 2.0的一个重大新特性,并在本次周期中得到了更多的关注。

程序化API和XML支持

为了获取以下内容的等价物

public class FishTank {

    private Optional<@Valid FishTankModel> model;

    private Map<@Size(min = 3, max = 10) String, @Min(1) Integer> fishCountByType;
}

现在可以通过XML映射配置(这是Bean Validation 2.0规范的一部分)或通过(实现特定的)程序化API来声明容器元素类型约束和级联验证

[...]
    <bean class="com.acme.FishTank" ignore-annotations="false">
        <field name="model">
            <containerElementType>
                <valid />
            </containerElementType>
        </field>
        <field name="fishCountByType">
            <containerElementType typeArgumentIndex="0">
                <constraint annotation="javax.validation.constraints.Size">
                    <element name="min">
                        <value>3</value>
                    </element>
                    <element name="max">
                        <value>10</value>
                    </element>
                </constraint>
            </containerElementType>
            <containerElementType typeArgumentIndex="1">
                <constraint annotation="javax.validation.constraints.Min">
                    <element name="value">
                        <value>1</value>
                    </element>
                </constraint>
            </containerElementType>
        </field>
    </bean>
[...]

或通过程序化API

ConstraintMapping newMapping = config.createConstraintMapping();
newMapping
    .type( FishTank.class )
        .property( "model", FIELD )
            .containerElementType()
                .valid()
        .property( "fishCountByType", FIELD )
            .containerElementType( 0 )
                .constraint( new SizeDef().min( 3 ).max( 10 ) )
            .containerElementType( 1 )
                .constraint( new MinDef().value( 1 ) );

其他改进

我们还进行了一些更小的改进

  • TYPE_ARGUMENT节点类型已重命名为CONTAINER_ELEMENT(类型参数对于注解数组元素没有意义)

  • 我们允许每个上下文自定义值提取器

  • 我们允许通过服务加载器机制贡献值提取器

  • 我们允许使用XML配置指定值提取器

  • 我们探索父类和接口以搜索ValueExtractor定义

对Bean Validation 2.0新增约束的支持

在Bean Validation 2.0的Alpha2版本中,我们引入了以下新约束

  • @NotBlank:检查字符串是否非空(即非null,并且去除空格后的字符串长度大于0)

  • @NotEmpty:检查元素(字符串、集合、数组)是否非null且非空

  • @Email:检查字符串是否为有效的电子邮件地址

  • @Positive:检查数字是否为正数

  • @Negative:检查数字是否为负数

我们为Hibernate Validator添加了对这些新约束的支持。

性能改进

我们开始对Hibernate Validator 6进行一些基准测试,并修复了一些性能回归问题。

6.0.0.Alpha2现在比5.4快得多,这主要归功于新的ValueExtractor设计。

获取6.0.0.Alpha2

要使用Maven、Gradle等获取此版本,请使用GAV坐标org.hibernate.validator:{hibernate-validator|hibernate-validator-cdi|hibernate-validator-annotation-processor}:6.0.0.Alpha2。请注意,组ID已从org.hibernate(Hibernate Validator 5和更早版本)更改为org.hibernate.validator(自Hibernate Validator 6开始)。

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

反馈、问题、想法?

要联系,请使用常用渠道

接下来是什么?

Bean Validation 2.0和Hibernate Validator 6仍在积极开发中。我们将定期发布新的alpha版本。


返回顶部