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

news/2024/11/14 12:34:28/

错误描述

在 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@ConditionalOnMissingBeanpublic HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters) {return new HttpMessageConverters(converters.orderedStream().collect(Collectors.toList()));}
}

重启项目,问题解决。


http://www.ppmy.cn/news/28888.html

相关文章

python+pytest接口自动化(4)-requests发送get请求

python中用于请求http接口的有自带的urllib和第三方库requests&#xff0c;但 urllib 写法稍微有点繁琐&#xff0c;所以在进行接口自动化测试过程中&#xff0c;一般使用更为简洁且功能强大的 requests 库。下面我们使用 requests 库发送get请求。requests库简介requests 库中…

HyperGBM的三种Early Stopping方式

本文作者&#xff1a;杨健&#xff0c;九章云极 DataCanvas 主任架构师 很多机器学习框架如都提供了Early Stopping策略&#xff0c;主要用来防止模型过拟合。和模型训练提前停止的目标不同&#xff0c;AutoML的Early Stopping策略更多考虑的是算力消耗和模型质量的平衡。 通…

【C++】泛型编程——模板初阶

文章目录1. 泛型编程2. 函数模板2.1 函数模板的概念2.2 函数模板的使用2.3 函数模板的原理2.4 函数模板的实例化隐式实例化显式实例化2.5 模板参数的匹配原则3. 类模板1. 泛型编程 首先我们来思考一个问题&#xff1a;如何实现一个通用的交换函数呢&#xff1f; 即我们想交换两…

芯片行业哪些岗位在涨薪?《基于UPF的低功耗数字后端设计实训课》火热报名中

&#xff08;部分图片来源于网络&#xff0c;如有侵权请联系我们删除&#xff0c;谢谢&#xff01;&#xff09; 基于UPF的低功耗数字后端设计技术是芯片设计中非常重要的一环&#xff0c;现在越来越多的公司和岗位对此有要求。如果从事相关领域的工作&#xff0c;想要涨薪或晋…

中睿天下当选信通院网络安全卓越合作伙伴

2月23日&#xff0c;2023年中国网络和数据安全产业高峰论坛—网络安全技术创新赋能产业发展分论坛在四川成都成功召开&#xff0c;分论坛以“技术创新、场景赋能、实效验证”为主题&#xff0c;由工业和信息化部网络安全管理局指导&#xff0c;中国信息通信研究院主办&#xff…

【K3s】第1篇 K3s入门级介绍及架构详解

1、什么是 K3s? K3s 是一个轻量级的 Kubernetes 发行版&#xff0c;它针对边缘计算、物联网等场景进行了高度优化。K3s 有以下增强功能&#xff1a; 打包为单个二进制文件。使用基于 sqlite3 的轻量级存储后端作为默认存储机制。同时支持使用 etcd3、MySQL 和 PostgreSQL 作…

2023年“网络安全”赛项浙江省金华市选拔赛 任务书

2023年“网络安全”赛项浙江省金华市选拔赛 任务书 任务书 一、竞赛时间 共计3小时。 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段单兵模式系统渗透测试 任务一 Windows操作系统渗透测试 任务二 Linux操作系统渗透测试 任务三 网页渗透 任务四 Linux系…

MySQL-查询语句

数据库管理系统的一个最重要的功能就是数据查询&#xff0c;数据查询不应只是简单查询数据库中存储的数据&#xff0c;还应该根据需要对数据进行筛选&#xff0c;以及确定数据以什么样的格式显示。MySQL提供了功能强大、灵活的语句来实现这些操作。下面是通过help帮助查看到的s…