是否可以在没有 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>