Я использую Jersey 2.4 для создания простого интерфейса REST, который обслуживает объект JSON. Моя проблема в том, что я пытаюсь использовать комментарии quickxml Jackson для контроля вывода, и это не работает для меня. Я поместил аннотации в мой класс bean, но они игнорируются.
Когда я явно создаю ObjectMapper и использую его для создания Java bean, я получаю вывод, который я хочу, который уважает аннотации Джексона. Тем не менее, я бы предпочел, чтобы мне не приходилось делать этот шаг, чтобы мой класс ресурсов мог просто вернуть bean, а структура "Джерси" позаботится о его подделке.
Я попытался решить эту проблему с помощью ответа Custom ObjectMapper с версией Jersey 2.2 и Jackson 2.1, однако это не работает для меня. Я вижу, что ContextResolver создан, но он никогда не вызывается.
Я также потратил много часов, пытаясь решить эту, по-видимому, простую проблему. Я разделил это на очень простой тестовый пример, который показан ниже. Я был бы признателен за любую помощь в решении этого вопроса.
Класс ресурса 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:
<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>