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

来源:https://www.cnblogs.com/ME-WE/archive/2023/02/28/17165851.html
-Advertisement-
Play Games

錯誤描述 在 Spring Cloud 項目中通過 Open Feign 遠程調用時出現如下錯誤: feign.codec.EncodeException: No qualifying bean of type 'org.springframework.boot.autoconfigure.http ...


錯誤描述

在 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()));
    }
}

重啟項目,問題解決。

少一些功利主義的追求,多一些不為什麼的堅持
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • MyBatis的關聯映射 Mybatis的關聯映射 實際的開發中,對資料庫的操作常常會涉及到多張表,這在面向對象中就涉及到了對象與對象之間的關聯關係。針對多表之間的操作,MyBatis提供了關聯映射,通過關聯映射就可以很好的處理對象與對象之間的關聯關係。 1.關聯關係概述 在關係型資料庫中,多表之間 ...
  • Spring 源碼環境搭建 Spring 是面向 Bean 的編程,Bean 在其中起到了巨大的作用,而 Spring 提供了 IOC 容器來管理對象之間的依賴關係,使我們可以更加關註業務,輕鬆的構建一個企業應用。藉助 IOC 特性和 AOP 面向切麵編程,可以說 Spring 為開發者提供了無限的 ...
  • 我是3y,一年CRUD經驗用十年的markdown程式員👨🏻‍💻常年被譽為職業八股文選手 在前陣子我就已經接入了釘釘的群機器人和工作消息推送,一直沒寫文章同步到給大家。 像這種接入渠道的工作,雖然我沒接入過,但可預見性地就是看看官方文檔,然後對著文檔一頓學習,複製下接入的代碼,然後調試,最後就 ...
  • VL33 非整數倍數據位寬轉換8to12 和上一題一樣的,註意valid_out輸出時加一個valid_in(其實32題也要加,不過不加模擬也能過)。 `timescale 1ns/1ns module width_8to12( input clk , input rst_n , input val ...
  • 歡迎關註個人公眾號:愛喝可可牛奶 LeetCode演算法訓練-回溯總結 適用問題 組合問題:N個數裡面按一定規則找出k個數的集合 排列問題:N個數按一定規則全排列,有幾種排列方式 切割問題:一個字元串按一定規則有幾種切割方式 子集問題:一個N個數的集合里有多少符合條件的子集 棋盤問題:N皇後,解數獨等 ...
  • if條件語句 if語句 if條件語法結構: if 條件語句: 滿足條件運行的代碼1 滿足條件運行的代碼2 ... ps:條件語句(可以是單個數據,即本身就是布爾類型)需返回一個布爾類型,判斷是否進入條件分支語句 if True: print('條件成⽴執⾏的代碼1') print('條件成⽴執⾏的代 ...
  • Lambda表達式 Lambda表達式理解 Lambda表達式是Jdk 8 開始新增的一種語法形式;作用:用於簡化匿名內部類的代碼寫法 註意:Lambda表達式只能簡化函數式介面的匿名內部類!!! 什麼是函數式介面? 有且僅有一個抽象方法的介面。 註意:大部分函數式介面,上面可能會有一個@Funct ...
  • 本節開始,將對 ResourceManager 中一些常見行為進行分析探究,看某些具體關鍵的行為,在 RM 中是如何流轉的。本節將深入源碼探究「啟動 ApplicationMaster」的具體流程。 ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...