为了使用http://json-b.net/,我发现有必要在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>前两条对我来说是有道理的。
但是,第三种依赖--来自玻璃鱼的玻璃鱼--到底给聚会带来了什么呢?为什么我的应用程序要工作呢?
如果省略,在运行Jsonb jsonb = JsonbBuilder.create();时,将得到以下错误:
javax.json.JsonException:找不到提供程序org.glassfish.json.JsonProviderImpl
我很困惑,因为我认为Yasson是我的JSON处理实现。
发布于 2019-06-15 06:04:33
实际上,您的代码应该只依赖于api jakarta.json.bind-api,因此您不会意外地使用来自yasson的实现细节,例如内部org.eclipse.yasson.internal.ReflectionUtils。为此,您应该将<scope>runtime</scope>添加到yasson依赖项中。只需运行它,就需要一个实现,并且选择了引用实现yasson。
但是JSON-B只是JSON-P之上的一个层:它执行绑定部分,同时将所有原始的JSON处理委托给JSON。您可以将任何JSON-B实现与任何JSON-P实现混合和匹配。
由于yasson必须能够处理任何JSON实现,所以它不能对Glassfish JSON有很强的依赖;您必须自己指定它(也可以使用runtime作用域)。您看到的错误消息提到了Glassfish,因为这是JSON正在寻找的后备实现。
https://stackoverflow.com/questions/56048893
复制相似问题