Как использовать Джексон 2 в Payara 5?

Я использую Jackson 2 с Payara 4, и мне бы хотелось использовать Jackson 2 в Payara 5.

Используя JAX-RS, я также хотел бы избежать изменения аннотаций и так далее...

В Payara 5 провайдером Jsonb по умолчанию является Yasson. Есть идеи отключить его и использовать вместо него Джексона? Все комментарии / идеи приветствуются:-)

NB: Yasson очень интересен, но обрабатывать абстрактный класс или сериализацию / десериализацию интерфейса немного сложнее, чем помещать аннотацию Джексона. В настоящее время я понимаю, что для этого требуется реализовать JsonbSerializer/Deserializer, но на самом деле сериализатор / десериализатор доступен только для поля / метода (проблема открыта для класса, что будет очень полезно). В любом случае, переход на Yasson будет означать реализацию многих сериализаторов / десериализаторов по мере необходимости (для сущностей и, конечно, коллекций), но я думаю, что это сложная вещь.

1 ответ

Вам необходимо установить свойство jersey.config.jsonFeature в JacksonFeature так что функция JsonB по умолчанию не зарегистрирована.

Вы можете установить его либо в коде, переопределив Application.getProperties() метод или установите свойство в web.xml как context-param:

<context-param>
  <param-name>jersey.config.jsonFeature</param-name>
  <param-value>JacksonFeature</param-value>
</context-param>

Вам также нужно добавить зависимости Джексона в ваше приложение - но вы, вероятно, уже сделали это, так что игнорируйте это.

Объяснение:

Функция Moxy предоставляет свойство jersey.config.disableMoxyJson отключить это. Функция JsonB по умолчанию в Payara 5 не предоставляет такого свойства, но не будет регистрироваться, если jersey.config.jsonFeature собственность существует и не JsonBindingFeature, То же свойство работает для всех функций Джерси, поэтому установите его на JacksonFeature позволит только JacksonFeature быть зарегистрированным.

Если ваш сервлет Jersey явно объявлен в web.xml (либо как javax.ws.rs.core.Application, либо как настраиваемый подкласс), тогда используйте вместо этого init-param в объявлении сервлета Jersey Application:

<servlet>
    <servlet-name>javax.ws.rs.core.Application</servlet-name>
    <init-param>
        <param-name>jersey.config.jsonFeature</param-name>
        <param-value>JacksonFeature</param-value>
    </init-param>
...
</servlet>
Другие вопросы по тегам