Можно ли использовать REST-клиент Quarkus с десериализацией JSON - без сервера RESTEasy? - PullRequest
0 голосов
/ 21 марта 2020

У меня есть сценарий использования для небольшого приложения Quarkus, которое должно вызывать конечную точку REST, но не должно запускать сам веб-сервер.

При следующих зависимостях десериализация 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, но также запускается веб-сервер.

Существует ли способ поддержки десериализации Джексона на Клиент REST, без запуска веб-сервера RESTEasy?

Вариант 1: можно ли для этого указать определенные c зависимости? Я поэкспериментировал с зависимостями от quarkus-resteasy-jackson отдельно, но не получил его на работу.

Вариант 2: чего-то не хватает в зависимости quarkus-jackson? Я бы предположил, что сериализация Джексона на клиенте REST должна поддерживаться без необходимости включать полную зависимость RESTEasy?

Другие варианты? Добавление ~ 10 МБ памяти RSS в приложение ~ 20 МБ - это большой процент накладных расходов для функции, которая не используется:)

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Вам не хватает одной дополнительной зависимости, которая 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>

PS как Кен , указанный в комментарии ниже, эта опция не работа с родным изображением

0 голосов
/ 04 мая 2020

Начиная с Quarkus 1.4.1.Final, есть несколько новых расширений, которые предлагают чистое решение этой проблемы:

  • rest-client-jackson
  • rest-client-jsonb
  • rest-client-jaxb

Таким образом, хотя решение в ответе Дмитрия сработало для меня, теперь 3 зависимости можно заменить одной зависимостью:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest-client-jackson</artifactId>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...