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>
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
.
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.