我们刚刚发布了 Hibernate Validator 9.0.0.Beta2,这是 Hibernate Validator 9.0 系列的第一个版本。

这个系列针对 Jakarta EE 11,是 Jakarta Validation 3.1 的实现。它还引入了新的约束,移除了安全管理器的集成,提供了 BOM 以简化依赖管理,包括依赖更新,并进行了其他改进和错误修复。

关于为什么第二个 beta 版本是这个系列的第一个版本,这是因为新发布流程的测试中,第一个 beta 版本没有正确发布。因此,请忽略 9.0.0.Beta1 版本。我们为由此给您带来的不便表示歉意,并感谢您的理解。

虽然 Hibernate Validator 的这个版本已经包括了 9.0 系列计划的所有功能和错误修复,并且没有计划进行重大更改,但我们仍然在等待一些依赖发布它们的最终版本,然后我们才能发布 Hibernate Validator 的 CR 或最终版本。

新功能

Jakarta EE 11 和 Jakarta Validation 3.1

9.0 系列专门针对 Jakarta EE 11,并实现了 Jakarta Validation 3.1。规范 3.1 的更新没有带来太多变化

  • 最低要求的 Java 版本设置为 17。

  • 规范从 Jakarta Bean Validation 重命名为 Jakarta Validation。

  • record 验证的说明,Hibernate Validator 已经支持了一段时间。

依赖升级

Jakarta Validation (HV-1979)

Hibernate Validator 现在实现了 Jakarta Validation 3.1。

Java表达式语言(Jakarta Expression Language,HV-2015

Hibernate Validator现在使用Jakarta Expression Language 6.0。想要依赖这种表达式语言进行消息插值的用户必须包含其实现,例如Expressly

Jakarta注解/Jakarta拦截器/Jakarta注入/Jakarta上下文和依赖注入(HV-2015

Hibernate Validator现在使用Jakarta Annotation 3.0、Jakarta Interceptor 2.2、Jakarta Injection 2.0和Jakarta Contexts and Dependency Injection 4.1。

其他
  • HV-1982:升级到Javax Money 1.1。

  • HV-1983:升级到Classmate 1.7.0。

  • HV-1985:升级到Joda Time 2.12.7。

  • HV-1982:升级到JBoss Logging 3.6.0。

新约束

本版本还带来了新的约束。

特定于韩国的RRN约束

新的约束@KorRRN验证字符序列是否为有效的韩国居民登记号。此约束还提供可选属性ValidateCheckDigit validateCheckDigit(),允许用户指定是否应计算和验证校验位。2020年10月之前发行的RRN使用校验位,而之后的则不使用。

@KorRRN (1)
String rrn;
// ...
@KorRRN(validateCheckDigit = KorRRN.ValidateCheckDigit.ALWAYS)  (2)
String rrn;
1 使用韩国居民登记号约束的默认配置,其中不验证校验位。
2 使用需要验证校验位才能通过的韩国居民登记号约束。

感谢Taewoo Kim贡献此约束。

比特币地址约束

新的@BitcoinAddress约束验证相应的字符串是否为格式良好的BTC(比特币)地址。此约束提供了一个BitcoinAddressType枚举,其中包含它可以验证的地址类型列表。默认情况下,使用BitcoinAddressType.ANY,允许验证BitcoinAddressType枚举中列出的所有其他地址类型。

@BitcoinAddress (1)
String address;
// ...
@BitcoinAddress({ BitcoinAddressType.P2TR, BitcoinAddressType.P2PKH }) (2)
private String address;
1 使用@BitcoinAddress约束的默认配置,其中认为BitcoinAddressType中列出的所有地址类型都是有效的。
2 应用@BitcoinAddress约束,其中认为P2TRP2PKH地址是有效的。

感谢José Yoshiriro贡献此约束。

字母数字CNPJ

从2026年1月起,巴西企业纳税人登记号(Cadastro de Pessoa Jurídica,CNPJ)将开始使用字母数字格式,而不是目前使用的简单数字格式。为了应对过渡,引入了新的可选format参数,允许验证字母数字格式。

@CNPJ (1)
String cnpj;
// ...
@CNPJ(format = CNPJ.Format.ALPHANUMERIC) (2)
private String cnpj;
1 使用@CNPJ约束的默认配置,其中认为仅数字格式是有效的。
2 应用@CNPJ约束,其中认为字母数字登记号是有效的。

感谢Marcos Vinícius da Silva提出CNPJ格式更改的计划。

Hibernate Validator BOM

Hibernate Validator现在提供BOM,提供所有已发布组件的依赖管理。它可以作为您依赖管理的一部分导入,以保持Hibernate Validator组件版本的一致性。

<dependencyManagement>
    <dependencies>
        <!-- Import Hibernate Validator BOM to get all of its artifact versions aligned: -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator-bom</artifactId>
            <version>{hibernateValidatorVersion}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- Any other dependency management entries -->
    </dependencies>
</dependencyManagement>
<!-- ... -->
<dependencies>
    <!-- Declare dependencies -->
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <!-- The version is managed by the BOM above -->
    </dependency>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator-cdi</artifactId>
        <!-- The version is managed by the BOM above -->
    </dependency>
    <!-- Any other dependency entries -->
</dependencies>

移除安全管理者集成

由于安全管理者已弃用且没有替代方案已有一段时间,我们利用最小Java版本要求的规范要求的机会,从Hibernate Validator中移除了安全管理者集成。

其他改进和错误修复

  • HV-1328: 仅当所有属性约束都有效时,添加验证类级别约束的选项。

  • HV-1978: 修复一个可能错误地将表达式语言级别传播到可迭代节点的问题。

  • HV-1971: 修复一个将所有数字都相同的CNPJ视为有效的问题。

  • HV-1946: 修复一个当自定义值提取器使用null作为可迭代节点名称时,路径可能损坏的问题。

  • HV-2008: 从Hibernate Validator测试工具中删除与AssertJ版本对齐,并使用当前的AssertJ版本。这已经被请求多次,因为用户使用测试工具来测试他们的自定义约束。

还有更多。请参阅发布说明,获取自上次发布以来的完整变更列表。

如何获取此版本

Hibernate Validator 9 面向即将到来的Jakarta EE 11。

所有详细信息都可在hibernate.org上的专用页面上找到,并保持最新。

入门,迁移

对于新应用,请参阅入门指南

对于现有应用,Hibernate Validator 9.0 在大多数情况下是 8.0 的直接替代品,前提是你还升级了其他Jakarta EE 11 相关依赖项。关于已弃用的配置和API的信息包含在迁移指南中。

反馈、问题、想法?

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


返回顶部