admin管理员组

文章数量:1529460

问题

前几天测试接口功能的时候,发现了一个奇怪的问题。
一些店铺创建并上架的商品,能正常查看详情,有一些则报错。

排查

首先看一下整体的业务流程

其中前一二三步是没有问题的,到第四部查看商品详情就开始出问题了,有一些商品查看时会报错。

首先查看报错原因

因为在搜索数据库数据的时候,搜索不到,导致了业务报错。

然后查看搜索条件

直接按照id搜索商品详情。

然后找id哪来的

在第三步返回商品分页数据的时候返回的。

用arthas查看服务器中的商品返回数据

发现id居然是正确的!!!

然后用postman模拟调用商品分页接口

发现返回的id居然也是正确的!!!

那只能怀疑是浏览器有问题了!!!

是不是浏览器对过长的整数的展示有问题

原因

通过资料查阅

发现浏览器能展示的数字是有上限的
js的number类型上限是2的53次方,而java的long类型上限是2的63次方。

解决方案

通用

将id的类型由long改为字符串。

而在我的场景下,部分店铺上架的商品有问题,部分没问题的原因是商品id是根据店铺id拼装生成的,当店铺id过大的时候就会导致商品id过大,超出浏览器上限,所以我可以通过修改商品id生成规则来解决这个问题。

本文标签: 精度浏览器Numberjs