Как использовать Джексон 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>