• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
北极糊的狐
帮助1

今天服务部署到云端后,前台的调用到了后台时,出现了如下报错,查看后端代码后发现其模块内部会跨服务调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构建实例出现类型异常,要么想别的办法去自定义反序列化咋搞吧,以后有别的办法回来补充

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhihgcgf
系列文章
更多 icon
同类精品
更多 icon
继续加载