在微服务中出现跨服务调用分页使用<IPage>时报错的问题

今天服务部署到云端后,前台的调用到了后台时,出现了如下报错,查看后端代码后发现其模块内部会跨服务调AUTH模块中的方法,而这个方法由于我用<IPage>分页接口封装了,调用后序列化出现异常,所以报这个错:

"Type definition error: [simple type, class com.baomidou.mybatisplus.core.metadata.IPage]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage` (no Creators, like default constructor, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information\n at [Source: (ByteArrayInputStream); line: 1, column: 18] (through reference chain: cn.esky.basic.base.R[\"data\"])"

其实仔细看黄底的这句报错,已经把错误原因很清楚的摆上来了,意思就是苞米豆下的这个IPage类型异常,然后再去到代码中:

这里是INDEX模块跨服务调用AUTH模块的getAllTeam接口,注意这里是<IPage>分页,而 com.baomidou.mybatisplus.core.metadata.IPage是一个接口(interface),源代码如下:

 之前在本地服务内部调用没有出现过问题是因为内部已经有了对应的实现,可以将其实现,但一旦出现别的模块跨服务调用就出现问题了,因为跨服务会涉及http对其进行序列化和得到字符串数据后的反序列化操作,这样别的模块在调用到我这里后得到数据,序列化成字符串通过IO输出流传回去再反序列化成Class不能构建实例,但IPage是个接口啊,他到了那头有没有实现,他怎么办,所以说,只能报这个错Type definition error。。。

下面把代码改成<Page>后,就没有出现问题了

唉,说到这,其实只要稍微对英文报错敏感一点,看一眼也就知道问题出在哪了,说到底还是因为自己经验不足。

总结:在微服务中跨服务调用时,如果遇到分页,要看看别是<IPage>类型,要么和相关模块负责人交涉能不能使用<Page>,因为IPage涉及到跨服务调用会进行序列化Class构建实例出现类型异常,要么想别的办法去自定义反序列化咋搞吧,以后有别的办法回来补充

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值