先看问题:

数据库 id 为 Bigint 类型:

javascript long型 Javascript long型最大值_取值


通过后端逻辑取值返回给前端:

javascript long型 Javascript long型最大值_序列化_02

JS 的number类型有个最大值(安全值)。即2的53次方,为9007199254740992(16位)。如果超过这个值,那么js会出现不精确的问题。

可以看出数据已经出错,js中数字类型最长为17位,导致后几位就会变成000,而导致后端查出来的数据与前端看到的ID不一致

解决办法可以这样:
使用 Fastjson 的 ToStringSerializer 注解,让系统序列化时,保留相关精度。

@JsonSerialize(using = ToStringSerializer.class)
    private Long id;