前不久和前端对接接口的时候,前端反应获取不到数据,经查看发现查询使用的id参数与数据库对不上,例如实际id值为1232140649566834690,前端在获取时却得到了1232140649566834700,诡异的是数据库中存在一条id相似,其他数据完全一致的记录。

没遇到过的问题,检查后台代码,id使用的是Mybaitis-plus的自动id生成器,生成一个19位的数字。

@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;

开启Mybatis的sql日志,使用Postman测试发现返回数据正常,打印日志正常,也就是说问题出现在前端。

灵光一闪感觉可能是数字长度问题,打开浏览器控制台输入id测试了一下发现:

> 1232140649566834690 
< 1232140649566834700

搜索了一下,JavaScript的数字长度最大16位,而返回的id长度19位,很明显问题找到。

不改动id类型的情况下,简单解决的办法:

@TableId(value = "id", type = IdType.ASSIGN_ID)
@JsonSerialize(using = ToStringSerializer.class)
private Long id;

返回时自动将id转为String类型。

至此解决,小知识+1