前后端分离,Jackson,Long精度丢失

案例:后端接口放回一个Long数据

    @GetMapping("/testForLong")
    public Map<String, Object> testForLong() {

        Map<String, Object> map = new HashMap<>();
        map.put("aaa", 1234567890123456789L);

        return map;
    }

实际前端接收的数据

前后端数据不一致。这是因为JavaScript中的数字一律采用IEEE-754标准的64位浮点数表示,这种格式可以很好地处理大多数数字运算,但对于非常大的整数(超出2^53 - 1),就可能出现精度损失,这就非常的恶心了,可能会让你感到莫名其妙。当从后端获取到Long类型的值并尝试在前端展示时,如果该值超过了JavaScript安全整数范围,那么显示的结果可能不准确。

如何解决:

全局解决方案:项目中所有的Long都会被转换为String进行输出。

java 复制代码
@Component
public class PackMapperCustomizer implements Jackson2ObjectMapperBuilderCustomizer {
    @Override
    public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
        jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance);
    }
}

某个字段单独处理:

java 复制代码
@Data
public class TestVo {

    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;
    
    private String name;
    private Long code;
}
相关推荐
计算机小白一个3 分钟前
蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)
java·数据结构·蓝桥杯
二十雨辰30 分钟前
[Java基础]网络编程
java·开发语言
ACGkaka_34 分钟前
抓包工具(三)Wireshark代理抓包Java程序的HTTPS请求
java·https·wireshark
Struggle Sheep1 小时前
容器化部署tomcat
java·tomcat
M1A11 小时前
Python语言发展史:从创立到成为全球热门
java
爱吃南瓜的北瓜2 小时前
Maven之jjwt依赖爆红
java·pycharm·maven
土豆儿@2 小时前
java之泛型
java·开发语言
橘猫云计算机设计2 小时前
基于SSM的《计算机网络》题库管理系统(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·python·计算机网络·毕设
菜鸟一枚在这3 小时前
深度解析建造者模式:复杂对象构建的优雅之道
java·开发语言·算法
gyeolhada3 小时前
2025蓝桥杯JAVA编程题练习Day5
java·数据结构·算法·蓝桥杯