首页 > 其他分享 >【SpringCloud】feign.codec.EncodeException: No qualifying bean of type

【SpringCloud】feign.codec.EncodeException: No qualifying bean of type

时间:2023-02-28 20:23:16浏览次数:53  
标签:feign HttpMessageConverters No spring Spring bean SpringCloud HttpMessageConvert

错误描述

在 Spring Cloud 项目中通过 Open Feign 远程调用时出现如下错误:

feign.codec.EncodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http.HttpMessageConverters' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
...

Spring Cloud 版本:Hoxton.SR9

Spring Cloud Alibaba 版本:2.2.2.RELEASE

Spring Boot 版本:2.3.7.RELEASE

错误原因

从报错信息中不难看出,错误原因是容器中缺少 HttpMessageConverters 这样一个 bean 对象。

GitHub 上 spring-cloud/spring-cloud-openfeign 与此相关的 issue:https://github.com/spring-cloud/spring-cloud-openfeign/issues/235。

在 spring-boot-autoconfigure 的较新版本中(具体哪个版本我也不知道),HttpMessageConverters 的自动配置条件更改了,可以参见 HttpMessageConvertersAutoConfiguration 类:

// 这里省去了其他无关注解
@ConditionalOnClass({HttpMessageConverter.class})
@Conditional({HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition.class})
public class HttpMessageConvertersAutoConfiguration {}

因为现在的 Spring Cloud Gateway 是基于 WebFlux 的,是 Reactive Web。所以根据 @Conditional 的条件,HttpMessageConvertersAutoConfiguration 就不会生效,进而也不会进行自动配置,就导致容器中缺少 HttpMessageConverters 对象。

解决方案

这个问题解决方法也很简单,只需自己写一个配置类,向容器中注册一个 HttpMessageConverters 对象即可。方法可以从 HttpMessageConvertersAutoConfiguration 中复制。参考如下:

@Configuration
public class FeignConfig {
    @Bean
    @ConditionalOnMissingBean
    public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {
        return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));
    }
}

重启项目,问题解决。

标签:feign,HttpMessageConverters,No,spring,Spring,bean,SpringCloud,HttpMessageConvert
From: https://www.cnblogs.com/ME-WE/p/17165851.html

相关文章

  • 用snort+barnyard2+base 搭建入侵检测系统IDS
    前言吐槽:最近给老板干活编写攻防教材,恰好我负责校对的这部分出了问题……原本师兄直接拷贝的那篇博客是15年的……环境用的ubuntu12,其中的snort-mysql早被drop掉了,14......
  • feign
    作用主要替代RestTemplateFeign是一个声明式的客户端,作用是帮助我们优雅的实现http请求的发送,解决上面的问题定义和使用Feign客户端步骤如下:引入依赖:<dependency>......
  • nvm node 版本管理
    nvm安装与使用1、nvm是什么nvm全名node.jsversionmanagement,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。下面列出下载、安装及使用......
  • canoe和python_给CANoe编程上点套路 – CAPLdll
    canoe和python_给CANoe编程上点套路–CAPLdllweixin_39585974于2020-12-2222:19:59发布734收藏8文章标签:canoe和python版权汽车电子攻城狮:“数据处理算法有点复......
  • centos 7 出现Error: requested datatype primary not available
    我在centos7安装插件的时候出现了以上的问题,然后就通过百度等办法查找相关的解决方案,大多数都是一样的答案,就是这边复制到那边的而已。就是一下的方案解决方式:[root@l......
  • UPX is not available解决办法
    1.UPXisnotavailablepyinstaller添加图片打包成exe时遇到这个问题,如图所示。需要下载upx.exe,放在pyinstaller.exe同一个目录下。把upx.exe放在如下目录:......
  • Vue项目中通过 avatarUrl: require('@/assets/user-avatar.png')出现required is not
    参考:https://blog.csdn.net/qq_37130872/article/details/128133646useImages.js//获取assets静态图片exportconstgetAssetsImge=(name)=>{returnne......
  • global与nonlocal关键字、函数名的多种用法、函数的嵌套调用、函数的嵌套定义、闭包函
    目录一、global与nonlocal关键字二、函数名的多种用法三、函数的嵌套调用四、函数的嵌套定义五、闭包函数六、装饰器简介一、global与nonlocal关键字global方法:用于局部......
  • node安装node-sass
    安装node-sass使用node版本不能太高,否则会报错checkingforPythonexecutable"C:\ProgramFiles\python"inthePATH下载cnpm:npminstallcnpm-g--registry=htt......
  • 安装node并创建vue项目
    1.多版本管理工具 nvmhttps://github.com/coreybutler/nvm-windows/releasesnvm-setup.zip2.打开nvm文件夹下的settings.txt文件node_mirror:https://npm.taobao......