Java后端返回Long类型数据与前端展示不一致(精度丢失)

问题描述

接口返回数据的时候,有一个Long类型的主键字段(使用雪花算法生成的19位数字),单元测试、postman、apifox的返回数据均与数据库数据一致(1614468766644559873),前端浏览器查看返回数据却不一致(1614468766644560000)。

原因

Java中Long类型可以表示的最大值是2 ^63-1,而JS的基础类型Number可以表示的最大值是 2 ^53(9007199254740992,共16位)。所以后端返回的数字数据在大于Number能表示的最大值时,JS无法正确解析从而出现精度丢失的问题。

解决方案

1、将返回给前端的Long类型数据改为String类型(常用);

2、在Long类型字段加上注解 @JsonSerialize(using = ToStringSerializer.class) 或者 @JsonFormat(shape = Shape.STRING)。

你可能感兴趣的:(java,前端,javascript)