前后端分离,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;
}
相关推荐
oak隔壁找我6 小时前
JVM常用调优参数
java·后端
蝎子莱莱爱打怪10 小时前
OpenClaw 从零配置指南:接入飞书 + 常用命令 + 原理图解
java·后端·ai编程
狼爷11 小时前
Go 没有 override?别硬套继承!用接口+嵌入,写更清爽的“覆盖”逻辑
java·go
小兔崽子去哪了14 小时前
Java 自动化部署
java·后端
ma_king14 小时前
入门 java 和 数据库
java·数据库·后端
后端AI实验室14 小时前
我用Cursor开发了3个月,整理出这套提效4倍的工作流
java·ai
码路飞18 小时前
GPT-5.3 Instant 终于学会好好说话了,顺手对比了下同天发布的 Gemini 3.1 Flash-Lite
java·javascript
SimonKing19 小时前
OpenCode AI编程助手如何添加Skills,优化项目!
java·后端·程序员
Seven9720 小时前
剑指offer-80、⼆叉树中和为某⼀值的路径(二)
java
怒放吧德德1 天前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty