微服务之间Feign调用无法解析IPage报错问题:Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage

这篇具有很好参考价值的文章主要介绍了微服务之间Feign调用无法解析IPage报错问题:Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

cannot construct instance of `com.baomidou.mybatisplus.core.metadata.ipage`,各大实战问题分析,微服务,架构,云原生
文章来源地址https://www.toymoban.com/news/detail-859925.html

一、前言

  • 最新在做一个对外提供基础信息的需求,我在A服务中写了一个分页接口,本以为很简单的我在B服务用 Feign 调用一下就可以了。
  • 可想并没有这么简单,报错了:
  • cannot construct instance of `com.baomidou.mybatisplus.core.metadata.ipage`,各大实战问题分析,微服务,架构,云原生
  • 从源码中我们可以看到:这里是分页,而 com.baomidou.mybatisplus.core.metadata.IPage是一个接口(interface),源代码如下:
  • cannot construct instance of `com.baomidou.mybatisplus.core.metadata.ipage`,各大实战问题分析,微服务,架构,云原生

二、分析

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

三、解决方案

1、使用 Page 进行接收,将原有的IPage改掉即可

  • 这个比较简单这里不做扩展

2、进行序列化处理

  • 把他们放在工程代码中的 config 包下即可
  1. IPage 反序列化类:IPageDeserializer
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 
import java.io.IOException;
 
public class IPageDeserializer extends StdDeserializer<IPage> {
    protected IPageDeserializer(Class<?> vc) {
        super(vc);
    }
    
    @Override
    public IPage deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        JsonNode node = p.getCodec().readTree(p);
        String s  = node.toString();
        ObjectMapper om = new ObjectMapper();
        Page page = om.readValue(s,Page.class);
        return page;
    }
}
  1. WebDataConvertConfig 类
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 
import java.util.Arrays;
import java.util.List;
 
@Configuration
public class WebDataConvertConfig extends WebMvcConfigurationSupport {
 
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(mappingJackson2HttpMessageConverter());
        super.configureMessageConverters(converters);
    }
 
    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
        SimpleModule module = new SimpleModule();
        module.addDeserializer(IPage.class, new IPageDeserializer(IPage.class));
        mapper.registerModule(module);
 
        converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8, MediaType.APPLICATION_OCTET_STREAM));
        converter.setObjectMapper(mapper);
 
        return converter;
    }
}

四、总结

  1. 以上方法均测试有效
  2. 参考文章:
    1. https://blog.csdn.net/FlyCloudLee/article/details/126640149
    2. https://blog.csdn.net/SSHLY3/article/details/122302919

到了这里,关于微服务之间Feign调用无法解析IPage报错问题:Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 各个微服务模块之间互相依赖调用的问题

    首先是模块之间不能够循环引用,否则会报循环依赖引入的错误。 没有了模块之间的相互依赖,在项目中这两个模块是相互调用的,分别各自定义相应的Feign接口,如下: 最开始写的运行报错的代码如下: 报错信息,如下: 报错的原因是这里定义了两个Feign接口,都是调用

    2024年02月11日
    浏览(32)
  • feign微服务之间传递请求头数据

    直接在微服务远程调用中获取请求头数据不能直接获取到.为什么? 看源码 默认情况下feign远程调用的时候不会传递请求头! 远程调用源码: 每一次远程请求的时候都创建了一个新的Request Template对象,在该对象中不包含之前的请求头数据 解决方案: 方案一:在feign接口上添加对应

    2024年02月06日
    浏览(29)
  • 关于使用Feign来实现微服务之间的文件下载

    在微服务当中,不同的服务之间需要进行通信,不乏微服务之间使用feign进行文件的下载上传使用场景。下边介绍如何使用Feign来进行微服务之间的下载excel 背景 :前两天做的一个需求,需要专门为材积信息而新启一个服务,其他系统调用此服务来进行获取产品的一些材积信

    2024年02月14日
    浏览(44)
  • 【Java项目】SpringCloud项目注册到Nacos中心时显示的是内网IP导致不同服务器之间无法互相调用接口的解决并发

    微服务项目地址—动动你发财的小手点一个stars吧 出现这个问题是之前我也就遇到过的,这个问题的情况就是: 我们知道微服务项目是可以把不同的项目部署在不同的服务器上从而减少某一台服务器的压力,我们只需要为每一个服务配置一个注册中心即可,然后一个服务需要

    2024年02月16日
    浏览(33)
  • 微服务远程调用Feign

    目录 RPC概述 什么是Feign? RibbonFeign对比 Feign的设计架构 Spring Cloud Alibaba快速整合Feign Spring Cloud Feign扩展 日志配置 契约配置 通过拦截器实现参数传递 自定义拦截器实现认证逻辑 超时时间配置 微服务之间如何方便优雅的实现服务间的远程调用? RPC 全称是 Remote Procedure Call ,

    2024年03月14日
    浏览(30)
  • 【微服务】Feign远程调用

           📝个人主页: 五敷有你         🔥系列专栏: 微服务 ⛺️稳中求进,晒太阳 先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenF

    2024年03月28日
    浏览(32)
  • 服务调用---------Ribbon和Feign

    目录 ​​​​​​​ 1、Ribbon 1.1 Ribbon简介 1.2 Ribbon负载均衡 负载均衡原理 负载均衡策略 Ribbon和Nginx的区别 1.3 服务调用和Ribbon负载均衡实现 2、FeignopenFeign 3、Feign支持的配置 日志功能  连接池  feign-api远程包 1.1 Ribbon简介 Ribbon是一个用于 客户端负载均衡的组件 ,它是Netfl

    2024年02月14日
    浏览(23)
  • 服务调用Ribbon,LoadBalance,Feign

    服务调用Ribbon、Fegin Ribbon实现负载均衡的原理 1:LoadBalancerAutoConfiguration这个类,这个类主要做的就是把LoadBalancer拦截器封装到RestTemplte拦截器集合里面去。 2:然后在代码里面调用restTemplate.getForObject或者其他方法的时候,就会调用到这个拦截器。 3:在LoadBalancer拦截器类中,

    2024年01月22日
    浏览(29)
  • 【微服务】SpringCloud之Feign远程调用

    🏡浩泽学编程 :个人主页  🔥 推荐专栏 :《深入浅出SpringBoot》《java对AI的调用开发》               《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 使用Feign远程调用代替RestTemplate远程调用。 使用RestTemplate发起远程调用: 虽然在引

    2024年04月15日
    浏览(20)
  • 微服务服务间调用组件Feign使用介绍、原理、优化技巧

    Feign是一个声明式的Web Service客户端。它让微服务之间的调用变得更简单。Feign具有可插拔式的注解支持,包括Feign 注解和JAX-RS注解。Feign还支持可插拔的编码器和解码器。Spring Cloud增加了对Spring MVC注解的支持,并且也支持Spring WebFlux。 Feign可以与Eureka和Ribbon组合使用以支持负载均

    2024年02月06日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包