问题描述
接口查询数据返回,有一个Long类型字段,postman返回与数据库一致(= 63354019632316416),swagger返回不一致(= 63354019632316420),chrome查看返回数据也不一致(= 63354019632316420)。
原因
Java中Long类型可以表示的最大值是2 ^63-1,而JS的基础类型Number可以表示的最大值是 2 ^53。所以后端返回的数据大于Number能表示的最大值时无法正确解析,出现精度丢失的问题。
解决方案
1、将返回给前端的Long类型数据改为String;
2、在Long类型字段加上注解 @JsonSerialize(using = ToStringSerializer.class) 或者 @JsonFormat(shape = Shape.STRING)。