日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小小涉及OpenFeign原理:Could not extract response: no suitable HttpMessageConverter found for response type

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小小涉及OpenFeign原理:Could not extract response: no suitable HttpMessageConverter found for response type 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、問題解釋(想看總結(jié)的去最下面)

org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class XXX] and content type [XXX;XXX]

凡是報這個錯誤,翻譯成人話就是
沒有一個自帶的轉(zhuǎn)換器能把[class XXX]轉(zhuǎn)換成content type [XXX;XXX]

二、問題解決

例如我這個項目,技術(shù)棧是nacos+openfeign+springboot+springcloud
我是在feign遠(yuǎn)程調(diào)用那會報錯的。

情形一:

content type[text/html;charset=utf-8] 為例子
可以自行建立一個config包,在config包下寫下MyRestTemplate類即可:

@Bean("restTemplate")public RestTemplate restTemplate(){RestTemplate restTemplate = new RestTemplate();MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();mappingJackson2HttpMessageConverter.setSupportedMediaTypes(Arrays.asList(MediaType.TEXT_HTML, //配了text/htmlMediaType.TEXT_PLAIN)); //配了 text/plainrestTemplate.getMessageConverters().add(mappingJackson2HttpMessageConverter);return restTemplate;} //類上面記得加@configuration

情形二:(有說到feign原理,懇請大家認(rèn)真理解謝謝)

說在最前面!!!!!!!!!!!!
也許看完之后你發(fā)現(xiàn)你的問題和我的表面上完全不一樣,但是我說的是思路,還是希望能幫到各位,可以自己去debug再試試哦,莫慌莫慌

開始:結(jié)合我個人經(jīng)歷去看,我debug了很久發(fā)現(xiàn)了一些問題
1.首先我有一個過濾器,過濾器會幫我過濾掉那些沒登錄就想請求私密領(lǐng)域的請求

2.其次我debug了一下feign源碼,我發(fā)現(xiàn)feign自動幫我用RequestTemplate這個類來幫我重新構(gòu)造一個請求
換句話說,但凡調(diào)用遠(yuǎn)程方法,feign都會“沒事干”地重新搞出一個新請求

3.然后我debug把遠(yuǎn)程調(diào)用的報錯那塊try catch得到了標(biāo)題這個報錯
4.這個時候別急,先去瀏覽器自己把完整url寫好,在瀏覽器自己調(diào)用一下報錯的那個遠(yuǎn)程方法,這個時候我的攔截器出場了,如下圖:

語句1,我注釋了,但是沒測試過注釋了行不行
語句2,我直接去訪問那個頁面的時候跳了這個報告,報告這個東西的原因是我的攔截器把這個請求攔截了,因為沒登錄
我現(xiàn)在大概知道為什么了

解釋:

在遠(yuǎn)程調(diào)用方法的時候,feign是會重構(gòu)造請求的,而feign重構(gòu)造請求會丟失請求頭和丟失上下文(這個可以百度,相當(dāng)于常識),換句話說,就算你登錄了,遠(yuǎn)程調(diào)用的時候由于丟失了session,系統(tǒng)也會判斷你沒登錄。
于是!
注意!!!!!!!!!!
原本被調(diào)用的那個方法應(yīng)該給我返回一個[application/json]這種類型的數(shù)據(jù)

但是你可能因為沒登錄,也就是沒調(diào)到那個接口,他給你重定向去了首頁,返回的類型不是[application/json],而有可能是下圖這種奇怪類型

恰好feign又沒有辦法解析這種類型,于是報錯!!
我想我應(yīng)該說明白了吧…是吧?(笑)

我解決問題比較暴力,如下圖:

當(dāng)匹配到這個路徑(也就是報錯的那個服務(wù)的url路徑)的時候,我直接返回true,也就是默認(rèn)他已經(jīng)登錄,然后再啟動服務(wù),發(fā)現(xiàn)這次就沒報錯了。

總結(jié)

檢查 content type [XXX;XXX] 到底是不是你要的,比如你希望得到 content type [application/json] 但是實際上卻不是。

如果不是你想要的,你就得看看你的其他遠(yuǎn)程服務(wù)會不會報同樣的錯,如果沒有報錯,說明是個別問題,需要你詳細(xì)看上面的情形二,找找靈感。如果是普適錯誤,說明你可能有其他問題…
如果是你想要的,那我覺得你去看看情形一吧,看看加上這個類有沒有用…

總結(jié)

以上是生活随笔為你收集整理的小小涉及OpenFeign原理:Could not extract response: no suitable HttpMessageConverter found for response type的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。