自 6.0.0.Beta1 发布以来才过去几周,但我们需要一个新的版本来匹配 Bean Validation 2.0.0.Beta2

Hibernate Validator 6 将成为 Bean Validation 2.0 的参考实现,因此我们协调发布,以便您可以尽快测试最新添加的功能。

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

自 Beta1 以来新功能

Bean Validation 2.0.0.Beta2 支持

本版本的主要目标是升级到 Bean Validation 2.0.0.Beta2。

我们修复了一些错误,并引入了一些新功能。

支持在值提取中非泛型类型

我们之前的值提取框架(这是我们的新容器元素验证实现的基础)仅支持泛型类型。

我们通过引入一个新的 type 属性到 ExtractedValue 注解来减轻这种限制,允许在提供信息的情况下定义提取值的类型。

因此,现在可以定义如下值提取器

@UnwrapByDefault
public class OptionalIntValueExtractor implements ValueExtractor<@ExtractedValue(type = Integer.class) OptionalInt> {

    @Override
    public void extractValues(OptionalInt originalValue, ValueReceiver receiver) {
        receiver.value( null, originalValue.isPresent() ? originalValue.getAsInt() : null );
    }
}

这正是 Hibernate Validator 所做的,以支持 OptionalIntOptionalLongOptionalDouble

通过节点构建器 API 添加容器元素信息

节点构建器 API 允许您使用 ConstraintValidatorContext 定义约束违反的属性路径。

现在可以定义支持现有节点类型或定义容器元素节点的容器元素信息

public static class Validator implements ConstraintValidator<MyConstraint, MyBean> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        context.disableDefaultConstraintViolation();

        context.buildConstraintViolationWithTemplate( context.getDefaultConstraintMessageTemplate() )
                .addContainerElementNode( "myNode1", Map.class, 1 )
                        .inIterable()
                        .atKey( "key" )
                .addConstraintViolation();

        context.buildConstraintViolationWithTemplate( context.getDefaultConstraintMessageTemplate() )
                .property( "myNode2" )
                        .inContainer( List.class, 0 )
                        .inIterable()
                        .atKey( "key" )
                .addConstraintViolation();

        return false;
    }
}

CDI 改进

在XML配置中定义的值提取器现在被管理为Bean。

我们还修复了一个问题,该问题可能出现在您使用管理型ParameterNameProvider时。

还有一些其他事情

  • @SafeHtml现在支持定义可接受的协议(例如,允许图像使用data协议),并且具有改进的编程API。

  • @Min / @Max@DecimalMin / @DecimalMax验证器已被拆分,每个类型有一个验证器,以避免在运行时使用反射。

已修复问题的完整列表可以在发布说明中找到。

获取6.0.0.Beta2

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

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

反馈、问题、想法?

要取得联系,请使用常规渠道

接下来是什么?

Bean Validation 2.0目前正在公共审查阶段,公共审查投票将于6月初进行。预计在此之后不久将发布建议的最终草案,因此如果您在规范草案中发现了任何剩余的问题或不足,请尽快告诉我们。

Hibernate Validator 6仍在积极开发中。我们会及时向您通报我们的进展。


返回顶部