Bas*_*que 6 java jsonb-api jakarta-ee yasson
为了使用Java API for JSON Binding (JSON-B),我发现有必要在我的Maven POM中包含以下三个依赖项:
\n\n <!-- https://mvnrepository.com/artifact/jakarta.json.bind/jakarta.json.bind-api -->\n <dependency>\n <groupId>jakarta.json.bind</groupId>\n <artifactId>jakarta.json.bind-api</artifactId>\n <version>1.0.1</version>\n\n </dependency>\n\n <!-- https://mvnrepository.com/artifact/org.eclipse/yasson -->\n <dependency>\n <groupId>org.eclipse</groupId>\n <artifactId>yasson</artifactId>\n <version>1.0.3</version>\n </dependency>\n\n <!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->\n <dependency>\n <groupId>org.glassfish</groupId>\n <artifactId>javax.json</artifactId>\n <version>1.1.4</version>\n </dependency>\nRun Code Online (Sandbox Code Playgroud)\n\n前两个对我来说很有意义。
\n\njakarta.json.bind-api是JSR 367定义的JSON-B API 。yasson是该 API 的参考实现Eclipse Yasson。javax.json\xe2\x9e\xa5 但是来自Glassfish 的第三个依赖项到底给聚会带来了什么?为什么我的应用程序需要它才能运行?
如果省略,运行时Jsonb jsonb = JsonbBuilder.create();会出现此错误:
\n\n\njavax.json.JsonException:找不到提供者 org.glassfish.json.JsonProviderImpl
\n
我很困惑,因为我认为 Yasson是我的 JSON 处理实现。
\n实际上,您的代码应该只依赖于 api jakarta.json.bind-api,因此您不会意外地使用来自 的实现细节yasson,例如内部org.eclipse.yasson.internal.ReflectionUtils. 为此,您应该添加<scope>runtime</scope>依赖yasson项。只是为了运行它,您需要一个实现,并且您选择了参考实现yasson。
但JSON-B只是JSON-P之上的一层:它负责绑定部分,同时将所有原始 JSON 处理委托给 JSON-P。您可以将任何 JSON-B 实现与任何 JSON-P 实现混合搭配。
由于yasson必须能够与任何 JSON-P 实现一起使用,因此它不能对 Glassfish JSON-P 等有硬依赖;你必须自己指定它(也有范围runtime)。您看到的错误消息提到了 Glassfish,因为这是 JSON-P 正在寻找的后备实现。
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |