最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用feign調(diào)用返回object類型轉(zhuǎn)換成實體

 更新時間:2022年03月16日 15:43:41   作者:Sue_小石頭  
這篇文章主要介紹了利用feign調(diào)用返回object類型轉(zhuǎn)換成實體,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

feign調(diào)用返回object轉(zhuǎn)成實體

<dependency>
? ? <groupId>com.fasterxml.jackson.core</groupId>
? ? <artifactId>jackson-databind</artifactId>
? ? <version>2.9.8</version>
</dependency>
ObjectMapper mapper=new ObjectMapper();
CourseMaster courseMaster = mapper.convertValue(bean,CourseMaster.class);
List<CourseMaster> list=(List<CourseMaster>)courseMasterList;//返回為Object類型
for(Object cs:list){
? ? CourseMaster courseMaster = mapper.convertValue(cs,CourseMaster.class);
}

feign調(diào)用報類型轉(zhuǎn)換錯誤

問題現(xiàn)象

springcloud feign服務(wù)間調(diào)用,運行至下圖1代碼A處報錯:

java.util.LinkedHashMap cannot be cast to(報錯如下圖2所示)

排查過程

step1:大多數(shù)情況下,第一反應(yīng)是仔細(xì)檢查語法是否有問題,確認(rèn)lambda表達(dá)式本身沒有問題;

step2:在確認(rèn)寫的沒有問題的情況下,將代碼片段拎出來寫一個main方法運行(如圖1代碼片段B),發(fā)現(xiàn)單獨拿出來在main方法中運行時正常!

step3:此時陷入困惑,于是重新仔細(xì)閱讀報錯信息:LinkedHashMap cannot be cast to xxx.BaseComapny,可以很清楚的確定是類型轉(zhuǎn)換錯誤。

再一行一行看代碼(圖1中代碼片段A),發(fā)現(xiàn)只有在代碼片段A上方的:List list = xxxxx這一段中有可能的類型轉(zhuǎn)換,所以暫時定位至此行代碼。

step4:step3中的推測不確定的原因在于:此行代碼中responseObject是直接通過服務(wù)調(diào)用獲取到的,請求響應(yīng)參數(shù)中已指定了對象類型,所以我認(rèn)為這里不存在強制類型轉(zhuǎn)換,也不存在LinkedHashMap。

繼續(xù)沿著上面的推測,如果確實存在問題,那只可能是通過服務(wù)調(diào)用獲取到的返回參數(shù)與預(yù)期不一致,step5:于是分別對上面圖1中代碼A和代碼B(也就是main方法)做debug,結(jié)果如下圖所示,發(fā)現(xiàn)確實服務(wù)調(diào)用后獲取的響應(yīng)參數(shù)與main方法中的不一致??梢钥吹狡蜛服務(wù)調(diào)用得到的響應(yīng)參數(shù)list中確實是LinkedHashMap!至此發(fā)現(xiàn)問題!

step6:由于確定自己沒有對服務(wù)調(diào)用前后特殊處理過響應(yīng)參數(shù),所以考慮這是框架行為,至此問題基本找到原因。

問題原因

找出原因后再針對性的百度答案就比較容易得到,簡單來說就是使用feign進(jìn)行遠(yuǎn)程服務(wù)調(diào)用的時候,返回參數(shù)(在我的代碼中,Response中的list部分)會變成LinkedHashMap。

以下是網(wǎng)上能找到的流傳最多的解釋(因為復(fù)制這段話的文章和博客太多了,無法確認(rèn)誰復(fù)制了誰,也無法確認(rèn)第一個寫的作者是誰,所以無法標(biāo)注出原作者):

這是因為RPC遠(yuǎn)程調(diào)用在底層使用的HTTPClient,所以在傳遞參數(shù)的時候,必定要有個順序,當(dāng)你傳遞Map的時候Map里面的值也要有順序,不然服務(wù)層在接的時候就出問題了,所以它才會從Map轉(zhuǎn)為LinkedHashMap!Spring 有一個類叫ModelMap,繼承了LinkedHashMap ,所以一個接口返回的結(jié)果就可以直接用ModelMap來接,注意ModelMap是沒有泛型的,不管你返回的結(jié)果是什么類型的Map,泛型是多復(fù)雜的Map,都可以直接new一個ModelMap,用它來接返回的結(jié)果。

解決辦法

1、最簡單的解決辦法就是在接收響應(yīng)參數(shù)的地方直接用LinkedHashMap接收,通過kv形式獲取到參數(shù);

2、通過json,objectmapper等方式將LinkedHashMap轉(zhuǎn)換成自己想要的對象;

3、對feign調(diào)用得到的響應(yīng)參數(shù)做自定義處理(也許可以?);

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 序列化與反序列化的實例詳解

    java 序列化與反序列化的實例詳解

    這篇文章主要介紹了java 序列化與反序列化的實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Java ArrayList的底層實現(xiàn)方法

    Java ArrayList的底層實現(xiàn)方法

    今天小編就為大家分享一篇Java ArrayList的底層實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Mybatis流式查詢并實現(xiàn)將結(jié)果分批寫入文件

    Mybatis流式查詢并實現(xiàn)將結(jié)果分批寫入文件

    這篇文章主要介紹了Mybatis流式查詢并實現(xiàn)將結(jié)果分批寫入文件方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • java中ZXing 生成、解析二維碼圖片的小示例

    java中ZXing 生成、解析二維碼圖片的小示例

    ZXing 是一個開源 Java 類庫用于解析多種格式的 1D/2D 條形碼,這篇文章主要介紹了java中ZXing 生成、解析二維碼圖片的小示例 ,有興趣的可以了解一下。
    2017-01-01
  • java中的分布式事務(wù)解決方式

    java中的分布式事務(wù)解決方式

    分布式事務(wù)是分布式系統(tǒng)中確保數(shù)據(jù)一致性的重要機(jī)制,它涉及多個數(shù)據(jù)源或參與者,要么所有操作全部成功,要么全部失敗,常見的解決方案包括2PC(兩階段提交協(xié)議)、3PC(三階段提交協(xié)議)和TCC(Try-Confirm-Cancel),2PC雖然簡單但存在單點故障等問題
    2024-09-09
  • java并發(fā)之synchronized

    java并發(fā)之synchronized

    這篇文章主要介紹了java并發(fā)關(guān)鍵字synchronized,包括內(nèi)容synchronized的使用、synchronized背后的Monitor、synchronized保證可見性和防重排序、使用synchronized注意嵌套鎖定,具體內(nèi)容請看下面文章吧
    2021-10-10
  • Java如何在臨界區(qū)中避免競態(tài)條件

    Java如何在臨界區(qū)中避免競態(tài)條件

    這篇文章主要介紹了Java如何在臨界區(qū)中避免競態(tài)條件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 如何去除Java中List集合中的重復(fù)數(shù)據(jù)

    如何去除Java中List集合中的重復(fù)數(shù)據(jù)

    這篇文章主要介紹了Java中List集合去除重復(fù)數(shù)據(jù)的方法,對大家的工作或?qū)W習(xí)有一定價值,有需求的朋友可以參考下
    2020-05-05
  • 解決springcloud 配置gateway 出現(xiàn)錯誤的問題

    解決springcloud 配置gateway 出現(xiàn)錯誤的問題

    今天給大家分享springcloud 配置gateway 出現(xiàn)錯誤的問題,其實解決方法很簡單,只需要降低springcloud版本,改成Hoxton.SR5就好了,再次改成Hoxton.SR12,也不報錯了,下面給大家展示下,感興趣的朋友一起看看吧
    2021-11-11
  • Java中ByteBuffer的allocate方法 和allocateDirect方法的區(qū)別和選用原則解析

    Java中ByteBuffer的allocate方法 和allocateDirect方法的區(qū)別和選用原則解析

    在Java中,ByteBuffer是java.nio包中的一個類,用于處理字節(jié)數(shù)據(jù),ByteBuffer提供了兩種方式來分配內(nèi)存:allocate和allocateDirect,這篇文章主要介紹了Java中ByteBuffer的allocate方法 和allocateDirect方法的區(qū)別和選用原則 ,需要的朋友可以參考下
    2023-12-12

最新評論

中江县| 德格县| 门源| 梁平县| 永春县| 界首市| 南雄市| 灯塔市| 扶绥县| 克拉玛依市| 共和县| 淮安市| 张家界市| 荣成市| 府谷县| 文山县| 晴隆县| 滨州市| 吉安县| 绥德县| 大悟县| 雷山县| 上思县| 剑河县| 五华县| 明溪县| 宝清县| 安丘市| 广昌县| 龙游县| 临邑县| 白沙| 斗六市| 阿勒泰市| 治多县| 金坛市| 财经| 望都县| 天峻县| 郓城县| 内乡县|