服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 通过FeignClient调用微服务提供的分页对象IPage报错的解决

通过FeignClient调用微服务提供的分页对象IPage报错的解决

2022-10-07 15:45hu_xian_ Java教程

这篇文章主要介绍了通过FeignClient调用微服务提供的分页对象IPage报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

问题描述

通过FeignClient调用微服务提供的分页对象IPage报错

{
"message": "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 construct, exist): abstract types either need to be mapped to concrete types, have custom deserializer, or contain additional type information at [Source: (PushbackInputStream); line: 1, column: 37] (through reference chain: com.test.invoice.vo.ResponseVO["data"])"
}

 

解决办法

当前mybatis-plus 本不支持 IPage,使用Page即可

生产者controller

通过FeignClient调用微服务提供的分页对象IPage报错的解决

Feign-api接口定义

通过FeignClient调用微服务提供的分页对象IPage报错的解决

消费者,Feign-api 调用

通过FeignClient调用微服务提供的分页对象IPage报错的解决

 

feign返回IPage无法返回结果集

通过feign调用,服务提供者返回IPage,客户端无法获取到结果;主要原因就是jackson需要默认构造函数序列化;

?
1
2
@PostMapping(value ="/page",consumes = MediaType.APPLICATION_JSON_VALUE)
ResponseModel<IPage<CommentDTO>> loadCommentPage(@RequestBody Comment condition);

 

Mybatis-plus修改方式

IPage改成Page即可

spring-data 修改方式也是一样的,最简单就是自己实现IPage就可以了,也可以通过SpringMvcContract方式重造结果集

 

feign的几种可能性

1、接口直接被调用

2、接口直接被调用的同时其他模块也需要这个接口,那么其他模块就需要通过fegin调用

3、不会被直接调用,所有接口通过feign调用

 

基于以上三点,有如下可能性

1、在使用fegin时候,服务提供者到底应该直接返回ResponseModel(统一返回值)还是只返回结果?

1和3直接返回ResponseModel即可,2如果直接返回ResponseModel那么调用者就需要自己判断code或者直接返回给前段不做任何处理,如果直接返回结果那么直接被调用那个接口就无法统一返回值;建议直接写成俩个方法

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/hu_xian_/article/details/103961149

延伸 · 阅读

精彩推荐