问题描述
接口返回数据的时候,有一个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)。
————————————————
版权声明:本文为CSDN博主「宇智波小强」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46535927/article/details/128827887