java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java Long转JSON出现精度丢失

Java Long转JSON出现精度丢失问题及解决

作者:路远_Programmer

Java Long类型转JSON时可能因JSON的通用数字类型不指定位数大小及JavaScript整数表达精度限制导致精度丢失,解决方法包括在Java对象中为Long类型字段添加@JsonFormat(shape=JsonFormat.Shape.STRING)注解,或在Spring框架中配置ObjectMapper以全局序列化行为

问题分析

Java Long 类型转为 JSON 时可能出现精度丢失的原因主要包括 JSON 的通用数字类型不指定位数大小以及JavaScript 存储大数字时的精度限制。‌

解决方案

问题实例

后端

前端

前端后端数据的 id 是对不上的!!!! 前端接收的数据中id后三位是不对的,出现了精度丢失。

解决方法

添加一个全局配置

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.jackson.JsonComponent;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

/**
 * Spring MVC Json 配置
 *
 * @author lhd
 */
@JsonComponent
public class JsonConfig {

    /**
     * 添加 Long 转 json 精度丢失的配置
     */
    @Bean
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        SimpleModule module = new SimpleModule();
        module.addSerializer(Long.class, ToStringSerializer.instance);
        module.addSerializer(Long.TYPE, ToStringSerializer.instance);
        objectMapper.registerModule(module);
        return objectMapper;
    }
}

前后端数据中的 id 对上了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文