最近将id改为雪花算法方式生成,后端使用雪花算法生成id,在返回给前端的时候没有问题,但是在前端使用id反查数据的时候始终查询不到数据。
经过数据跟踪最终定位到是浏览器的问题,因为浏览器无法解析太长的数字,最终导致id精度丢失。
在浏览器的console中验证,可以看到最后几位发生了变化。
例如生成的id是1594605819398193154
而前端展示的为1594605819398193200
这是因为JS是弱语言,前端接收数字类型参数为number
最大接收长度为16位,超出长度则会丢失精度
而JAVA的Long类型长度为19位,所以传输到前端的后三位精度丢失
所以我们解决该问题的思路就是:把java里的Long类型转换为String返回给前端