电光石火-穿越时空电光石火-穿越时空


修复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<HttpMessageConverter<?>> 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);
    }

本博客所有文章如无特别注明均为原创。作者:似水的流年
版权所有:《电光石火-穿越时空》 => 修复Long类型太长,而Java序列化JSON丢失精度问题的方法
本文地址:http://ilkhome.cn/index.php/archives/447/
欢迎转载!复制或转载请以超链接形式注明,文章为 似水的流年 原创,并注明原文地址 修复Long类型太长,而Java序列化JSON丢失精度问题的方法,谢谢。

评论