【问题标题】:How can I force Jackson to write numbers as strings when serializing my objects序列化对象时如何强制杰克逊将数字写为字符串
【发布时间】:2013-04-09 18:13:29
【问题描述】:

我的一个 java 对象上有一个非常大的 id。当杰克逊将其转换为 JSON 时,它会将其作为数字发送(例如 {"id":1000110040000000001}),但一旦它成为 javascript 对象,id 就会更改为 1000110040000000000。我读到了这个问题 here

当 id 较小时它工作正常。我的第一个想法是强迫杰克逊将所有数字转换为字符串,但我也愿意接受其他选择。如果可能的话,我不希望将 Jackson 注释添加到我的 java 对象中。

【问题讨论】:

标签: java javascript json jackson


【解决方案1】:

Jackson-databind(至少 2.1.3)提供了特殊的 ToStringSerializer。这对我有用。

@Id @JsonSerialize(using = ToStringSerializer.class)
private Long id;

【讨论】:

    【解决方案2】:

    com.fasterxml.jackson.core:jackson-core:2.5.4 提供 JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS 用于ObjectMapper 配置。

    final ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS, true);
    
    Foo foo = new Foo(10);
    System.out.println("Output: " + objectMapper.writeValueAsString(foo));
    

    输出:{"a":"1"}

    class Foo {
        @XmlElement(name = "a")
        Integer a
    }
    

    要包含依赖项:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.7.2</version>
    </dependency>
    

    【讨论】:

    • 谢谢!这种方法可以让我以我想要的方式序列化自动生成的类,而无需更改类定义
    • 在application.properties中,可以使用spring.jackson.generator.write-numbers-as-strings=true
    猜你喜欢
    • 2017-09-22
    • 2018-02-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    相关资源
    最近更新 更多