色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

java淺拷貝BeanUtils.copyProperties引發的RPC異常

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-08-13 17:11 ? 次閱讀

背景

近期參與了一個攻堅項目,前期因為其他流程原因,測試時間已經耽擱了好幾天了,本以為已經解決了卡點,后續流程應該順順利利的,沒想到 人在地鐵上,bug從咚咚來~

沒有任何修改的服務接口,拋出異常:

java.lang.ClassCastException: java.util.HashMap cannot be cast to cn.xxx.xxx.xxx.xxx.BatchInfo

排查過程

1、作為資深寫bug的老司機,第一感覺是傳參的報文格式有問題了,可以通過模擬報文排查。于是乎,在群里圈了服務提供方同學B看下,BG快速的用測試工具+本地debug的方式,驗證了下報文格式,發現居然都調用成功了。。。

2、同步服務調用同學L,重點關注:1)、調用方的序列化方式;2)、最近代碼改動邏輯是否有問題。L同學確認自己邏輯沒有問題后,同步B同學和S同學,看內部是否有什么處理邏輯。。。

3、第二天早上一來,快速寫了單測,確認服務端收到的報文格式,的確沒有問題。于是乎,開始扒代碼。。。發現可疑的代碼:

BeanUtils.copyProperties(item,cargoInfo)

private List convertToCargoInfo(OutboundEventCallbackRequest outboundEventCallbackRequest) {
        return outboundEventCallbackRequest.getCargos().stream().map(item -> {
            CargoInfo cargoInfo = new CargoInfo();
            BeanUtils.copyProperties(item, cargoInfo);
            return cargoInfo;
    }).collect(Collectors.toList());
}

PS:客戶端&服務端類關系

wKgZoma7I12Adv4CAAaUrZ8XgAk384.png

因為BeanUtils.copyProperties屬于淺拷貝,而淺拷貝只是調用子對象的set方法,并沒有將所有屬性拷貝(引用的一個內存地址)。所以將在進行調用時,JSF會因為反序列化時找不到對應的類,就會將其轉換為Map。

直觀圖如下:

wKgaoma7I12ANFYMAAJJs4c9l80256.png

?

以上,初步定位原因,解決方式也就清晰了。

解決方案

去掉BeanUtils.copyProperties,進行手動賦值。最終解決了這個問題。

?

后續反思

1、想起王東岳老師的那句話,越原始的越穩定~

2、如果這種轉換比較多,建議使用MapStruct

3、謹慎使用BeanUtils.copyProperties,請看:

wKgZoma7I16AVHfIAAZyJNafGQM035.png

?

?


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2973

    瀏覽量

    104880
  • RPC
    RPC
    +關注

    關注

    0

    文章

    111

    瀏覽量

    11540
收藏 人收藏

    評論

    相關推薦

    Java中的常用異常處理方法 java推薦

    Java中,異常情況分為Exception(異常)和Error(錯誤)兩大類,Java異常通常是指程序運行過程中出現的非正常情況,如用戶輸
    發表于 01-19 17:26

    為什么移植ucosii進入hardfault會引發異常

    移植完ucosii后,運行了一下,發現在任務調度時進入hardfault異常經過調試后發現是在OS_Sched()函數運行結束時引發異常,這個是調試截圖,好像是在出棧指令pop引發
    發表于 08-29 04:35

    請問哪位大神可以詳細介紹JavaScript拷貝和深拷貝

    JavaScript數據類型JavaScript拷貝和深拷貝
    發表于 11-05 07:16

    Java異常處理及其應用

    Java異常處理引出 假設您要編寫一個 Java 程序,該程序讀入用戶輸入的一行文本,并在終端顯示該文本。 程序如下: 1 import java.io.*;2 public c
    發表于 11-09 12:03 ?15次下載

    java異常處理的設計與重構

    尋找出錯的根源?但是如果一個項目異常處理設計地過多,又會嚴重影響到代碼質量以及程序的性能。因此,如何高效簡潔地設計異常處理是一門藝術,本文下面先講述Java異常機制最基礎的知識,然后給
    發表于 09-27 15:40 ?1次下載
    <b class='flag-5'>java</b><b class='flag-5'>異常</b>處理的設計與重構

    Java常見內存溢出異常分析

    Java 堆是用來存儲對象實例的, 因此如果我們不斷地創建對象, 并且保證 GC Root 和創建的對象之間有可達路徑以免對象被垃圾回收, 那么當創建的對象過多時, 會導致 heap 內存不足, 進而引發 OutOfMemoryError
    發表于 11-28 12:48 ?1267次閱讀

    C#拷貝與深拷貝區別解析

     所謂拷貝就是將對象中的所有字段復制到新的副本對象中;拷貝對于值類型與引用類型的方式有區別,值類型字段的值被復制到副本中后,在副本中的修改不會影響源對象對應的值;然而對于引用類型的
    發表于 11-29 08:32 ?2.6w次閱讀
    C#<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>與深<b class='flag-5'>拷貝</b>區別解析

    java教程之如何進行Java異常處理?

    本文檔的主要內容詳細介紹的是java教程之如何進行Java異常處理?
    發表于 09-28 17:16 ?0次下載

    Python如何防止數據被修改Python中的深拷貝拷貝的問題說明

    在平時工作中,經常涉及到數據的傳遞。在數據傳遞使用過程中,可能會發生數據被修改的問題。為了防止數據被修改,就需要再傳遞一個副本,即使副本被修改,也不會影響原數據的使用。為了生成這個副本,就產生了拷貝——今天就說一下Python中的深拷貝
    的頭像 發表于 03-30 09:54 ?3073次閱讀
    Python如何防止數據被修改Python中的深<b class='flag-5'>拷貝</b>與<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>的問題說明

    Java異常的習題和代碼分析

    Java異常的習題和代碼分析
    發表于 07-08 14:54 ?5次下載
    <b class='flag-5'>Java</b><b class='flag-5'>異常</b>的習題和代碼分析

    C++之拷貝構造函數的copy及深copy

    C++編譯器會默認提供構造函數;無參構造函數用于定義對象的默認初始化狀態;拷貝構造函數在創建對象時拷貝對象的狀態;對象的拷貝拷貝和深
    的頭像 發表于 12-24 15:31 ?766次閱讀

    C++面向對象編程中的深拷貝拷貝

    可能對于Java程序員來說,很少遇到深淺拷貝問題,但是對于C++程序員來說可謂是又愛又恨。。
    的頭像 發表于 03-30 12:53 ?800次閱讀
    C++面向對象編程中的深<b class='flag-5'>拷貝</b>和<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>

    C++深拷貝拷貝詳解

    當類的函數成員存在指針成員時會產生深拷貝拷貝和問題。
    發表于 08-21 15:05 ?342次閱讀
    C++深<b class='flag-5'>拷貝</b>和<b class='flag-5'>淺</b><b class='flag-5'>拷貝</b>詳解

    Python中拷貝與深拷貝的操作

    【例子】拷貝與深拷貝中 list1 = [ 123 , 456 , 789 , 213 ]list2 = list1list3 = list1[:] print (list2) # [ 123
    的頭像 發表于 11-02 10:58 ?416次閱讀

    Java怎么排查oom異常

    Java中的OOM(Out of Memory)異常是指當Java虛擬機的堆內存不足以容納新的對象時拋出的異常。OOM異常是一種常見的運行時
    的頭像 發表于 12-05 13:47 ?1268次閱讀
    主站蜘蛛池模板: 国产偷国产偷亚洲高清人乐享| 国产欧美国日产在线播放| 国产成人免费观看| 欧美一区二区三区久久综| 3d在线看小舞被躁视频| 快穿之H啪肉| 97国产蝌蚪视频在线观看| 羞羞影院午夜男女爽爽免费| 成人精品视频99在线观看免费| 青柠电影高清在线观看| 被黑人群jian又粗又大H| 日日摸夜夜嗷嗷叫日日拍| 国产成人亚洲精品午夜国产馆| 无码任你躁久久久久久久| 果冻传媒在线观看网站| 一区二区乱子伦在线播放| 久久精品国产亚洲AV未满十八 | 免费女性裸身照无遮挡网站| 99精品视频在线观看免费播放 | 十九岁在线观看免费完整版电影 | 麻豆一二三四区乱码| av在线不卡中文网| 色欲AV久久综合人妻蜜桃| 国产又爽又黄又不遮挡视频| 野草在线视频完整视频| 美女扒开屁股让男人桶| 波多野结衣网站www| 性xxx在线观看| 久久久久综合一本久道| PORN白嫩内射合集| 羞羞漫画视频| 理论937| WRITEAS塞红酒瓶| 无码专区无码专区视频网网址 | 嫩小xxxxbbbb| 二级特黄绝大片免费视频大片| 午夜看片网| 美女的让男人桶爽网站| 国产AV亚洲一区精午夜麻豆 | 老司机福利视频一区在线播放| yellow视频免费观看高清在线|