在微服务出现跨服务调用分页使用<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构建实例出现类型异常,要么想别的办法去自定义反序列化咋搞吧,以后有别的办法回来补充
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhihgcgf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22