Java 在序列化对象时,如何强制Jackson将数字写入字符串
我的一个java对象上有一个相当大的id。当它将其转换为JSON时,它会将其作为一个数字发送(例如,{“id”:1000110040000000001}),但一旦它成为一个javascript对象,id就会更改为1000110040000000000。我读到这个问题 当id较小时,它可以正常工作。我的第一个想法是强迫Jackson将所有数字转换成字符串,但我也愿意接受其他选择。如果可能的话,我不希望向java对象添加Jackson注释。Jackson数据绑定(至少2.1.3)提供了特殊的ToString序列化程序。那是为了我Java 在序列化对象时,如何强制Jackson将数字写入字符串,java,javascript,json,jackson,Java,Javascript,Json,Jackson,我的一个java对象上有一个相当大的id。当它将其转换为JSON时,它会将其作为一个数字发送(例如,{“id”:1000110040000000001}),但一旦它成为一个javascript对象,id就会更改为1000110040000000000。我读到这个问题 当id较小时,它可以正常工作。我的第一个想法是强迫Jackson将所有数字转换成字符串,但我也愿意接受其他选择。如果可能的话,我不希望向java对象添加Jackson注释。Jackson数据绑定(至少2.1.3)提供了特殊的ToSt
@Id @JsonSerialize(using = ToStringSerializer.class)
private Long id;
com.fasterxml.jackson.core:jackson-core:2.5.4
提供
JsonGenerator.Feature.WRITE_NUMBERS_作为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”}
要包含依赖项,请执行以下操作:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.2</version>
</dependency>
com.fasterxml.jackson.core
杰克逊核心
2.7.2
相关:感谢您指出这一点。显然,在2.1.3版中,您可以这样做:@JsonSerialize(使用=ToStringSerializer.class)。如果我可以在对象映射器中设置一些总体设置,那还是很好的,但是如果不可能的话,这就可以了。可能是重复的,谢谢!这种方法允许我以我想要的方式序列化自动生成的类,而无需更改类定义。在application.properties中,您可以使用spring.jackson.generator.write numbers as strings=true
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.2</version>
</dependency>