You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarkus 3.4.1实例化Validator遇NoProvider异常(Validation.buildDefaultValidatorFactory)

解决Quarkus 3.x中Hibernate Validator实例化的NoProviderFoundException问题

问题原因

Quarkus 3.x基于Jakarta EE 9+规范,Bean Validation API已从javax.validation迁移至jakarta.validation。你的代码仍在使用旧的javax.validation.Validation.buildDefaultValidatorFactory()方法,而Quarkus 3.x默认集成的Hibernate Validator 8.x是适配Jakarta EE的实现,无法被旧的javax API识别,因此抛出NoProviderFoundException。

解决方案

1. 替换API包路径

将代码中所有javax.validation相关的导入替换为jakarta.validation:

// 替换前
import javax.validation.Validation;
import javax.validation.Validator;

// 替换后
import jakarta.validation.Validation;
import jakarta.validation.Validator;

之后使用新API实例化Validator:

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();

2. 优先使用Quarkus CDI注入(推荐)

在Quarkus应用中,更符合框架最佳实践的方式是通过CDI注入获取Validator实例,而非手动构建工厂:

import jakarta.inject.Inject;
import jakarta.validation.Validator;

public class YourCustomService {
    @Inject
    Validator validator;

    // 在这里使用validator执行校验逻辑
}

这种方式由Quarkus容器管理Validator实例,自动适配Jakarta EE环境,避免手动实例化带来的兼容性问题。

3. 确认依赖配置(可选)

检查项目构建配置,确保引入Quarkus官方的Hibernate Validator扩展:

  • Maven(pom.xml):
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>
  • Gradle(build.gradle):
implementation 'io.quarkus:quarkus-hibernate-validator'

该扩展会自动引入适配Quarkus 3.x的Hibernate Validator 8.x版本,无需手动添加额外Provider依赖。

验证

修改完成后重新运行应用,检查是否仍存在NoProviderFoundException,同时查看日志是否输出Hibernate Validator启动信息,示例如下:

INFO  [org.hib.val.int.uti.Version] (Quarkus Main Thread) HV000001: Hibernate Validator 8.0.1.Final

内容的提问来源于stack exchange,提问作者tamilanbu10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 07:06:29