web-dev-qa-db-fra.com

Configurer Jackson en tant que fournisseur JSON dans JAX-RS 2.0

Je souhaite utiliser Jackson comme fournisseur JSON pour mon service Web JAX-RS 2.0. Pour JAX-RS, j'utilise Jersey 2.0 dans GlassFish 4. Avec JAX-RS 1.x, je peux ajouter

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

dans mon web.xml. Comment puis-je faire cela dans Jax-RS 2.0 avec Jersey 2.0? J'implémente une classe d'application comme celle-ci

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

et ajoutez ces lignes à mon web.xml.

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

Mais j'obtiens une exception par la demande org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter introuvable pour le type de média = application/json, type = class ...

Ma pom.xml ressemble à ça

<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>
13
Tim

Vous ne devriez avoir besoin que du pot d'implémentation fournisseur JAX-RS Jackson , ajoutez-le à votre chemin de classe, et cela devrait fonctionner. La version 2.x utilise l'enregistrement automatique basé sur SPI, de sorte que vous n'avez besoin de rien dans web.xml.

21
StaxMan

Le code ci-dessus a fonctionné pour moi. JAX-RS 2.0 a une fonction de découverte automatique, il devrait donc détecter votre jersey-media-json-jackson.jar. J'utilise une configuration Tomcat, j'ai donc dû appeler explicitement register(JacksonFeature.class) dans mon application comme vous le faites.

13
SuperNova1054