一.踩坑描述:
废话不多说,先奉上报错日志:
起因是在进店打卡时,一部分用户可以正常打卡,另外一部用户分则打卡失败。
二.分析原因:
进店打卡时,前端从高德api获取到某个定位的省市区乡镇街道等字段,通过高德api返回的String类型参数传给后端入库保存,但是通过打卡失败用户的定位地址分析,由于用户打卡的定位不存在街道,高德api将街道字段直接返回成空数组,而不是空字符串,所以出现以上截图的报错。此外如果定位是直辖市,地市字段也会变成空数组,而不是空字符串。
三.解决方案:
前端进行参数校验,如果省市区乡镇街道等字段为空数组转化成空字符串,后端再进行接收。
四.反思总结:
1.这次线上的bug给用户带来了不良的体验,所以在调用第三方API时,不能太过于相信对方,参数一定要做校验,确保万无一失!
2.另外此报错:Cannot deserialize instance of java.lang.String
out of START_ARRAY token 大致是因为接收到的参数类型和申明定义的参数类型不一致造成的。