我们刚刚发布了 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。
新约束
本版本还带来了新的约束。
特定于韩国的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 约束,其中认为P2TR 和P2PKH 地址是有效的。 |
感谢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>
如何获取此版本
Hibernate Validator 9 面向即将到来的Jakarta EE 11。
所有详细信息都可在hibernate.org上的专用页面上找到,并保持最新。
入门,迁移
对于新应用,请参阅入门指南
对于现有应用,Hibernate Validator 9.0 在大多数情况下是 8.0 的直接替代品,前提是你还升级了其他Jakarta EE 11 相关依赖项。关于已弃用的配置和API的信息包含在迁移指南中。
反馈、问题、想法?
要取得联系,请使用常规渠道
-
用户论坛(使用问题、一般反馈)
-
问题跟踪器(错误报告、功能请求)
-
邮件列表(与开发相关讨论)
-
Jakarta Validation开发邮件列表(关于Jakarta Validation规范讨论)