Почему Джексон сериализует числовые поля в строки? - PullRequest
3 голосов
/ 29 февраля 2012

У меня есть следующий ресурс Джерси, Джерси настроен на использование Джексона для автоматического преобразования JSON-POJO:

@Path("/test")
public class TestResource {
    @POST
    @Consumes({ MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_JSON })
    public TestResponse testGet(final TestRequest req) {
        final TestResponse response = new TestResponse();
        response.x = req.x + 1;
        return response;
    }

    @XmlRootElement
    public static class TestRequest {
        public int x;
    }

    @XmlRootElement
    public static class TestResponse {
        public int x;
    }
}

Я называю это с:

{"x":5}

И получите ответ:

{"x":"6"}

Но почему значение здесь является строкой, когда поле x в TestResponse является целым числом?

Ответы [ 2 ]

0 голосов
/ 10 марта 2012

Как упомянуто в предыдущем примере, определенно возможно настроить Джерси, чтобы предоставить вам ожидаемое поведение.Однако на самом деле похоже, что Джерси использует стандартную запись MAPPING и вообще не использует Джексона.Я бы рассмотрел, как вы настроили Джексона в своем веб-приложении.Самым простым способом настроить Джексона было создание следующих двух файлов ...

  • META-INF / services / javax.ws.rs.ext.MessageBodyReader
  • META-INF / services / javax.ws.rs.ext.MessageBodyWriter

Оба этих файла содержат только следующий текст ...

org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider

Вот ссылкаобъяснение двух способов настроить Джексона для работы с аннотациями JAX-RS

0 голосов
/ 02 марта 2012

Вы можете использовать nonStrings (): http://jersey.java.net/nonav/documentation/latest/json.html#d4e1011

Или проверьте натуральные обозначения: http://jersey.java.net/nonav/documentation/latest/json.html#d4e1058

...