如何强制 Jackson 在序列化我的对象时将数字写为字符串

问题描述 投票:0回答:2

我的一个 java 对象有一个相当大的 id。当 Jackson 将其转换为 JSON 时,它会将其作为数字发送(例如 {"id":1000110040000000001}),但一旦它成为 javascript 对象,id 就会更改为 1000110040000000000。我在here

读到了这个问题

当id较小时效果很好。我的第一个想法是强迫杰克逊将所有数字转换为字符串,但我也对其他选择持开放态度。如果可能的话,我不想将 Jackson 注释添加到我的 java 对象中。

java javascript json jackson
2个回答
36
投票

Jackson-databind(至少2.1.3)提供特殊的ToStringSerializer。这对我来说是这样的。

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

21
投票

自 Jackson 2.10 以来,有

com.fasterxml.jackson.core.json.JsonWriteFeature#WRITE_NUMBERS_AS_STRINGS
用于
JsonFactory
配置。

ObjectMapper objectMapper = new ObjectMapper(
    JsonFactory.builder().enable(WRITE_NUMBERS_AS_STRINGS).build()
);
    
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.18.2</version>
</dependency>
© www.soinside.com 2019 - 2024. All rights reserved.