【问题标题】:Why is Jackson serializing numeric fields to Strings?为什么杰克逊将数字字段序列化为字符串?
【发布时间】:2012-02-29 16:59:16
【问题描述】:

我有以下 Jersey 资源,Jersey 已配置为使用 Jackson 进行自动 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"}

但是为什么这里的值是一个字符串,而TestResponse中的x字段是一个int呢?

【问题讨论】:

  • 默认情况下,一切都被序列化为字符串。我不确定为什么这对客户来说是个问题。
  • 嗯,很奇怪 - 我该如何改变这种行为?
  • 这个问题你解决了吗?

标签: java jersey jackson


【解决方案1】:

如前面的示例中所述,绝对可以配置 Jersey 以提供您期望的行为。然而,它实际上看起来像 Jersey 使用的是默认的 MAPPING 表示法,而根本没有使用 Jackson。我将回顾您如何将 Jackson 配置到您的 Web 应用程序中。我配置 Jackson 最简单的方法是创建以下两个文件...

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

这两个文件都只包含以下文本...

org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider

Here is a link explaining the two ways to configure Jackson to work with JAX-RS annotations

【讨论】:

  • 你怎么知道它使用的是默认映射符号?
【解决方案2】:
猜你喜欢
  • 2017-09-22
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多