Utilisation de Jackson ObjectMapper avec Jersey

Je suis en utilisant le Maillot de 2,4 à créer une simple interface REST qui sert un objet JSON. Mon problème est que je suis en train d'utiliser le fasterxml Jackson annotations pour contrôler la sortie et ce n'est pas de travail pour moi. J'ai mis des annotations dans ma classe d'haricot, mais ils sont ignorés.

Quand je créer explicitement un ObjectMapper et de l'utiliser pour stringify le haricot de Java, j'obtiens le résultat que je veux, qui respecte les Jackson annotations. Cependant, je préférerais que je n'ai pas à faire de cette étape, afin que ma classe de ressource peut simplement renvoyer le haricot le Jersey et le framework prend soin de stringifying.

J'ai essayé de résoudre ce à l'aide de la réponse de Personnalisé ObjectMapper avec Jersey 2.2 et 2.1 Jacksoncependant, cela ne semble pas fonctionner pour moi. Je vois que le ContextResolver est créé mais il n'est jamais appelé.

J'ai aussi passé de nombreuses heures à tenter de résoudre ce qui, apparemment, problème simple. J'ai dépouillé cette baisse à une très simple cas de test, ce qui est illustré ci-dessous. J'apprécierais un peu d'aide dans la résolution de ce.

Des ressources de la classe Java:

@Path("resource")
public class MainResource {
public static class Foobar {
@JsonIgnore
private String foo = "foo";
private String baa = "baa";
private Map<String, List<? extends Number>> map = new HashMap<>();
public Foobar() {
map.put("even", Arrays.asList(new Integer[] { 2, 4, 6, 8, 10 }));
map.put("odd", Arrays.asList(new Integer[] { 1, 3, 5, 7, 9 }));
map.put("float", Arrays.asList(new Float[] { 1.1F, 2.2F, 3.3F }));
}
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
public String getBaa() {
return baa;
}
public void setBaa(String baa) {
this.baa = baa;
}
@JsonAnyGetter
public Map<String, List<? extends Number>> getMap() {
return map;
}
public void setMap(Map<String, List<? extends Number>> map) {
this.map = map;
}
}
private ObjectMapper om = new ObjectMapper();
@GET
@Path("get-object")
@Produces(MediaType.APPLICATION_JSON)
public Foobar getObject() {
//In this method, I simply return the bean object but the WRONG JSON syntax is generated.
return new Foobar();
}
@GET
@Path("get-string")
@Produces(MediaType.APPLICATION_JSON)
public String getString() throws JsonProcessingException {
//This method returns the RIGHT JSON syntax but I don't want to have to explicitly use the ObjectMapper.
Foobar foobar = new Foobar();
return om.writeValueAsString(foobar);
}
}

web.xml:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<module-name>sample</module-name>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>ie.cit.nimbus.sample</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

POM dépendances:

<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.4.1</version>
</dependency>
</dependencies>

source d'informationauteur jcstockdale