Подтвердить что ты не робот

Настройте Джексона как поставщика JSON в JAX-RS 2.0

Я хочу использовать Jackson в качестве провайдера JSON для моего веб-сервиса JAX-RS 2.0. Для JAX-RS я использую Jersey 2.0 в GlassFish 4. С JAX-RS 1.x я могу добавить

<init-param>
  <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
  <param-value>true</param-value>
</init-param>

в моем web.xml. Как я могу сделать это в Jax-RS 2.0 с помощью Джерси 2.0? Я реализую класс приложения, подобный этому

public class MyRESTExampleApplication extends ResourceConfig {
    public MyRESTExampleApplication() {
         packages("com.carano.fleet4all.restExample");
         register(JacksonFeature.class);
    }
}

и добавьте эти строки в мой web.xml.

<init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>com.example.restExample.MyRESTExampleApplication</param-value>
</init-param>

Но я получаю исключение по запросу org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter не найден для типа media = application/json, type = class...

Мой pom.xml выглядит следующим образом

<dependencies>
  <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>
4b9b3361

Ответ 1

Вам нужно только получить jar Jackson JAX-RS, добавить это в свой класс, и он должен работать. Версия 2.x использует автоматическую регистрацию на основе SPI, так что вам не нужно ничего в web.xml.

Ответ 2

Этот код работал у меня. JAX-RS 2.0 имеет функцию автоматического обнаружения, поэтому он должен обнаружить ваш jersey-media-json-jackson.jar. Я использую настройку Tomcat, поэтому я должен был явно вызвать register(JacksonFeature.class) в моем приложении так же, как и вы.