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

时间:2013-04-17 05:36:04

标签: java javascript json jackson

我的一个java对象上的id非常大。当jackson将其转换为JSON时,它会将其作为数字发送(例如{“id”:1000110040000000001})但是一旦它成为javascript对象,id就会变为1000110040000000000.我读到了这个问题here

当id较小时,它可以正常工作。我的第一个想法是强迫杰克逊将所有数字转换成字符串,但我也对其他选项持开放态度。如果可能的话,我宁愿不将Jackson注释添加到我的java对象中。

2 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分:14)

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

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>