我的一个 java 对象上有一个非常大的 id。当杰克逊将其转换为 JSON 时,它会将其作为数字发送(例如 {"id":1000110040000000001}),但一旦它成为 javascript 对象,id 就会更改为 1000110040000000000。我在这里读到了这个问题
当 id 较小时,它工作正常。我的第一个想法是强迫杰克逊将所有数字转换为字符串,但我也愿意接受其他选择。如果可能的话,我不希望将 Jackson 注释添加到我的 java 对象中。
我的一个 java 对象上有一个非常大的 id。当杰克逊将其转换为 JSON 时,它会将其作为数字发送(例如 {"id":1000110040000000001}),但一旦它成为 javascript 对象,id 就会更改为 1000110040000000000。我在这里读到了这个问题
当 id 较小时,它工作正常。我的第一个想法是强迫杰克逊将所有数字转换为字符串,但我也愿意接受其他选择。如果可能的话,我不希望将 Jackson 注释添加到我的 java 对象中。
Jackson-databind(至少 2.1.3)提供了特殊的 ToStringSerializer。那是为我做的。
@Id @JsonSerialize(using = ToStringSerializer.class)
private Long id;
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>