修复Long类型太长,而Java序列化JSON丢失精度问题的方法 - 电光石火-Java序列化JSON时long型数值,会出现精度丢失的问题。 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值)....

电光石火

陌晴博客
ilkhome.cn
首页>> >>修复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丢失精度问题的方法

版权所有:《电光石火》 => 修复Long类型太长,而Java序列化JSON丢失精度问题的方法
本文地址:http://www.ilkhome.cn/?post=447
欢迎转载!请注明,文章均为 《电光石火》 原创,并注明本文地址,谢谢。

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)