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
相关产品推荐
相关产品推荐

