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

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

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

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

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

com.fasterxml.jackson.core:jackson-core:2.5.4ObjectMapper配置提供了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 } 

要包含依赖项:

  com.fasterxml.jackson.core jackson-core 2.7.2