是否可以在没有 RESTEasy 服务器的情况下使用具有 JSON 反序列化的 Quarkus REST 客户端?
Is it possible to use Quarkus REST client with JSON deserialization - without RESTEasy server?
我有一个小型 Quarkus 应用程序的用例,它必须能够调用 REST 端点,但不应该 运行 Web 服务器本身。
具有以下依赖项,JSON 不支持反序列化:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jackson</artifactId>
</dependency>
运行 应用程序输出以下日志:
WARN [io.qua.res.com.dep.ResteasyCommonProcessor] (build-11) Quarkus detected the need of REST JSON support but you have not provided the necessary JSON extension for this. You can visit https://quarkus.io/guides/rest-json for more information on how to set one.
...
ERROR [...] ProcessingException while creating reply for journey details request: RESTEASY003145: Unable to find a MessageBodyReader of content-type application/json and type class X.
(警告是根据这张票添加的:https://github.com/quarkusio/quarkus/issues/4157)
将配置更改为:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
REST 客户端 Jackson 反序列化有效,但它也会启动 Web 服务器。
有没有办法在没有 运行RESTEasy 网络服务器的情况下支持 REST 客户端上的 Jackson 反序列化?
选项 1:我可以为此添加特定的依赖项吗?我分别尝试了 quarkus-resteasy-jackson 的依赖项,但没有让它工作。
选项 2:quarkus-jackson 依赖项中是否缺少某些内容?我假设应该能够支持 REST 客户端上的 Jackson 序列化,而无需包含完整的 RESTEasy 依赖项?
其他选择?将 ~10MB RSS 内存添加到 ~20MB 应用程序对于未使用的功能来说是一个很大的开销百分比:)
您缺少一个额外的依赖项,即 resteasy-jackson2-provider
以下是应该有效的库组合:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
</dependency>
P.S 因为 Ken 在下面的注释中指定,此选项不适用于本机图像
自 Quarkus 1.4.1.Final 以来,有一些新的扩展为这个问题提供了一个干净的解决方案:
rest-client-jackson
rest-client-jsonb
rest-client-jaxb
因此,虽然 Dmytro 的答案中的解决方案对我有用,但现在可以将 3 个依赖项替换为一个依赖项:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-jackson</artifactId>
</dependency>
我有一个小型 Quarkus 应用程序的用例,它必须能够调用 REST 端点,但不应该 运行 Web 服务器本身。
具有以下依赖项,JSON 不支持反序列化:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jackson</artifactId>
</dependency>
运行 应用程序输出以下日志:
WARN [io.qua.res.com.dep.ResteasyCommonProcessor] (build-11) Quarkus detected the need of REST JSON support but you have not provided the necessary JSON extension for this. You can visit https://quarkus.io/guides/rest-json for more information on how to set one.
...
ERROR [...] ProcessingException while creating reply for journey details request: RESTEASY003145: Unable to find a MessageBodyReader of content-type application/json and type class X.
(警告是根据这张票添加的:https://github.com/quarkusio/quarkus/issues/4157)
将配置更改为:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
REST 客户端 Jackson 反序列化有效,但它也会启动 Web 服务器。
有没有办法在没有 运行RESTEasy 网络服务器的情况下支持 REST 客户端上的 Jackson 反序列化?
选项 1:我可以为此添加特定的依赖项吗?我分别尝试了 quarkus-resteasy-jackson 的依赖项,但没有让它工作。
选项 2:quarkus-jackson 依赖项中是否缺少某些内容?我假设应该能够支持 REST 客户端上的 Jackson 序列化,而无需包含完整的 RESTEasy 依赖项?
其他选择?将 ~10MB RSS 内存添加到 ~20MB 应用程序对于未使用的功能来说是一个很大的开销百分比:)
您缺少一个额外的依赖项,即 resteasy-jackson2-provider
以下是应该有效的库组合:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson2-provider</artifactId>
</dependency>
P.S 因为 Ken 在下面的注释中指定,此选项不适用于本机图像
自 Quarkus 1.4.1.Final 以来,有一些新的扩展为这个问题提供了一个干净的解决方案:
rest-client-jackson
rest-client-jsonb
rest-client-jaxb
因此,虽然 Dmytro 的答案中的解决方案对我有用,但现在可以将 3 个依赖项替换为一个依赖项:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-rest-client-jackson</artifactId>
</dependency>