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

Quarkus项目中JsonProviderImpl找不到问题排查求助

解决Quarkus中Jakarta JSON API的Provider找不到异常

我在Quarkus项目中编写REST接口时,使用Jakarta JSON API解析请求JSON,添加了以下依赖:

<dependency>
    <groupId>jakarta.json</groupId>
    <artifactId>jakarta.json-api</artifactId>
    <version>2.1.3</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>jakarta.json</artifactId>
    <version>2.0.1</version>
</dependency>

接口代码如下:

@POST
@Produces(MediaType.APPLICATION_JSON)
@Path("/room-available-by-type")
public Response getAvailableRoomsByType(String request_) throws DataException, IOException {
    Reader reader = new StringReader(request_);
    JsonReader jsonReader = Json.createReader(reader);
    JsonObject request = jsonReader.readObject();
    jsonReader.close();
    reader.close();
    String arrival = request.getString("dateArrivee");
    String departure = request.getString("dateDepart");
    JsonArray rooms = request.getJsonArray("roomList");
    System.out.println("================== arrival dans getAvailableRoomsByType = "+arrival);
    final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    List<Xxx> roomList = new ArrayList<>();
    Xxx xxx = new Xxx();
    xxx.setTypeChambre("xxx");
    roomList.add(xxx);
    return Response.ok(roomList, MediaType.APPLICATION_JSON).build();
}

运行时抛出异常:Provider org.glassfish.json.JsonProviderImpl not found,尝试过换成javax.json的1.1版本依赖,执行mvn clean install -DskipTests后问题依旧。


问题根源

Quarkus的类加载机制和原生编译特性对第三方库有特定适配要求,直接引入GlassFish的Jakarta JSON实现,会和Quarkus的依赖管理或类加载逻辑冲突,导致找不到Provider实现类。

解决方案

1. 替换为Quarkus官方JSON扩展

移除pom.xml中现有的jakarta.json-api和org.glassfish:jakarta.json依赖,添加Quarkus提供的JSON-P扩展(已适配Quarkus的Jakarta JSON Processing实现):

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-jsonp</artifactId>
</dependency>

该扩展已包含API和适配Quarkus的实现,无需额外添加其他JSON相关依赖。

2. (可选)优化接口代码,简化JSON解析

Quarkus支持直接将请求JSON绑定到POJO,无需手动解析:

  • 先定义请求实体类:
public class RoomAvailabilityRequest {
    private String dateArrivee;
    private String dateDepart;
    private List<String> roomList; // 可根据实际字段类型调整

    // 生成getter、setter方法
}
  • 修改接口方法:
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON) // 新增注解,告知Quarkus自动解析JSON
@Path("/room-available-by-type")
public Response getAvailableRoomsByType(RoomAvailabilityRequest request) throws DataException {
    String arrival = request.getDateArrivee();
    String departure = request.getDateDepart();
    List<String> rooms = request.getRoomList();
    System.out.println("================== arrival dans getAvailableRoomsByType = "+arrival);
    final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    List<Xxx> roomList = new ArrayList<>();
    Xxx xxx = new Xxx();
    xxx.setTypeChambre("xxx");
    roomList.add(xxx);
    return Response.ok(roomList, MediaType.APPLICATION_JSON).build();
}

这种方式无需手动创建JsonReader,代码更简洁且不易出错。

3. 重新构建项目

执行以下命令清理并构建项目:

mvn clean package -DskipTests

重新启动Quarkus应用后,异常即可消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:57:35