记一次调第三方接口反序列化时容易出现且忽略的问题且很难排查

出现问题

在完成上周工作时有一个接口出现了一个 empty string异常,刚开始还以为是我项目没重启导致的(因为我确信我的业务代码没有问题),然而事情并没有我想象中的简单。

首先来看这个异常

在这里插入图片描述

在这里插入图片描述

是在feign的解码器中抛出来的异常,解码失败了,说什么是空字符串,我还以为是第三方接口返回了一个空字符串?然后又调试,发现第三方接口返回的内容没有问题, 然后我就懵逼了

在这里插入图片描述

然后我只能说服自己要坚强,接下来就一步一步调

在这里插入图片描述

异常是在 feign解码时抛出来的,那好,我们在这里下个断点

在这里插入图片描述

发现是在进行json反序列化时抛出的异常, 那好,那我们就看看它是怎么反序列化的又是反序列化到哪个阶段出现了异常
在这里插入图片描述

一直跟进来
在这里插入图片描述
在这里插入图片描述

发现确实是在反序列某个字段时出现的异常,那好,我倒要看看是哪个字段出现了问题(此时该靓仔已经感觉到了事情不对劲)
在这里插入图片描述

到这里我突然反应过来,因为我们有同一生成代码的程序,而这个程序生成的实体类中的属性使用的是基本数据类型,例如 int double等, 感觉大事不妙,赶紧去把实体类中的属性都改成了引用类型,然后事情并没有那么简单

在这里插入图片描述

好吧那接着调,发现就这个字段有问题
在这里插入图片描述
然后我们看看它的值是什么,一看不得了,竟是个空串,空串本身没什么问题,但是我实体类用的是double类型的,所以下面进行setter,不得了,异常就来了
在这里插入图片描述

因为代码是自动生成的,该字段在我们生成的代码的程序里定义为double类型,但接口返回的确是一个String类型的,所以才会出现这个问题,解决也很简单,手动把那个属性改成String类型接收就行了,

这种问题往往也是我们在写代码时最容易忽略的,但是出现问题时我们要有解决问题的能力

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值