gpt4 book ai didi

java - 在将 Yasson 与 JSON-B 结合使用时,为什么需要 Glassfish 中的 javax.json 作为依赖项?

转载 作者:行者123 更新时间:2023-11-30 05:39:02 25 4
gpt4 key购买 nike

为了使用Java API for JSON Binding (JSON-B) ,我发现有必要在我的 Maven POM 中包含以下三个依赖项:

    <!-- https://mvnrepository.com/artifact/jakarta.json.bind/jakarta.json.bind-api -->
<dependency>
<groupId>jakarta.json.bind</groupId>
<artifactId>jakarta.json.bind-api</artifactId>
<version>1.0.1</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.eclipse/yasson -->
<dependency>
<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.0.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
<version>1.1.4</version>
</dependency>

前两个对我来说很有意义。

➥ 但是第三个依赖项,来自 Glassfishjavax.json 到底是什么? ,带去聚会吗?为什么我的应用程序需要它才能运行?

如果省略,运行 Jsonb jsonb = JsonbBuilder.create(); 时,我会收到此错误:

javax.json.JsonException: Provider org.glassfish.json.JsonProviderImpl not found

我很困惑,因为我认为 Yasson 是我的 JSON 处理实现。

最佳答案

实际上,你的代码应该只依赖于api jakarta.json.bind-api ,这样您就不会意外使用 yasson 中的实现详细信息,例如内部org.eclipse.yasson.internal.ReflectionUtils 。为此,您应该添加 <scope>runtime</scope>给您yasson依赖性。只是为了运行它,您需要一个实现,并且您选择了引用实现 yasson .

但是JSON-B只是 JSON-P 之上的一层:它执行绑定(bind)部分,同时将所有原始 JSON 处理委托(delegate)给 JSON-P。您可以将任何 JSON-B 实现与任何 JSON-P 实现混合搭配。

yasson必须能够与任何 JSON-P 实现一起使用,它不能硬依赖于 Glassfish JSON-P 等;您必须自己指定它(也具有 runtime 范围)。您看到的错误消息提到了 Glassfish,因为这是 JSON-P 正在寻找的后备实现。

关于java - 在将 Yasson 与 JSON-B 结合使用时,为什么需要 Glassfish 中的 javax.json 作为依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56048893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com