美文网首页
记一个很神奇的接口返回json数据bug

记一个很神奇的接口返回json数据bug

作者: Katou_Megumi | 来源:发表于2019-04-02 17:21 被阅读0次

    今天工作中碰到一个很神奇的bug,花了很多时间,最后才找到问题,特此记录下防止后人踩坑。

    问题描述

    在处理一个接口的报错,定位到问题是根据简历id(tob_resume_id)获取简历详情的时候没能获取到数据,这是很不正常的,因为其他地方都能正常获取。经过比对,发现是传的tob_resume_id不对,为何不对,因为返回简历id的接口返回的简历id就是错的。

    接口返回的tob_resume_id
    于是去看代码,发现tob_resume_id是从表中查出来的,用sql一查,发现数据库查出来的id是正确的!
    mysql查出来的tob_resume_id

    这就很奇怪了,于是去看代码逻辑,发现并没有对这个id进行过处理,最后直接return返回了。也就是说理论上前端拿到的应该就是数据库查到的1227结尾的id。ssh到服务器上,打断点进行调试,发现直到最后return前的最后一步,data中的tob_resume_id还是1227,那为何结果到了页面上的接口返回值中就变成了1200呢?百思不得其解。

    解决过程

    考虑过是否有缓存,有中间件进行处理,经过考虑之后一一否决。最终只能想到和其他也返回tob_resume_id的接口进行比对,看看到底是哪里有不同。然后发现了一个很细微的不同——

    tob_resume_id是字符串!
    此接口返回的tob_resume_id是字符串,而上一个接口返回的是整型!

    抱着这个怀疑,我询问了一名老司机同事,在他的确认下我才知道:

    JSON的数字类型是有最大值的!
    JS在处理超出最大值的数字时会进行截断!所以此时需要把数字转成字符串才能正确显示!

    这真的是我以前不知道的知识点了,原来json还有这种特性。
    在使用类型转换在return之前将tob_resume_id转成字符串之后,问题解决了,接口开始返回正确的值了。

    相关文章

      网友评论

          本文标题:记一个很神奇的接口返回json数据bug

          本文链接:https://www.haomeiwen.com/subject/stggbqtx.html