java long 保留两位小数_修复Long类型太长,而Java序列化JSON丢失精度问题的方法...

Java序列化JSON时long型数值,会出现精度丢失的问题。

原因:

java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值).

解决办法(一):

使用ToStringSerializer的注解,让系统序列化

时,保留相关精度

@JsonSerialize(using=ToStringSerializer.class)

private Long createdBy;

上述方法需要在每个对象都配上该注解,此方法过于繁锁。

解决办法(二):(推荐)

使用全局配置,将转换时实现自动ToStringSerializer序列化

@Override

public void configureMessageConverters(List> converters) {

FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

FastJsonConfig fastJsonConfig = new FastJsonConfig();

fastJsonConfig.setSerializerFeatures(

SerializerFeature.DisableCircularReferenceDetect,

SerializerFeature.BrowserCompatible);

//解决Long转json精度丢失的问题

SerializeConfig serializeConfig = SerializeConfig.globalInstance;

serializeConfig.put(BigInteger.class, ToStringSerializer.instance);

serializeConfig.put(Long.class, ToStringSerializer.instance);

serializeConfig.put(Long.TYPE, ToStringSerializer.instance);

fastJsonConfig.setSerializeConfig(serializeConfig);

fastConverter.setSupportedMediaTypes(fastMediaTypes);

fastConverter.setFastJsonConfig(fastJsonConfig);

converters.add(fastConverter);

}


版权声明:本文为weixin_30200131原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。