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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取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
    +關注

    關注

    20

    文章

    2983

    瀏覽量

    106483
  • RPC
    RPC
    +關注

    關注

    0

    文章

    111

    瀏覽量

    11735
收藏 0人收藏

    評論

    相關推薦

    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 ?1328次閱讀

    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 ?3207次閱讀
    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 ?898次閱讀

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

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

    C++深拷貝拷貝詳解

    當類的函數成員存在指針成員時會產生深拷貝拷貝和問題。
    發表于 08-21 15:05 ?474次閱讀
    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 ?531次閱讀

    Java怎么排查oom異常

    Java中的OOM(Out of Memory)異常是指當Java虛擬機的堆內存不足以容納新的對象時拋出的異常。OOM異常是一種常見的運行時
    的頭像 發表于 12-05 13:47 ?1459次閱讀

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 俄罗斯破处 | 玖玖爱这里只有精品视频 | 在线观看中文字幕国产 | 欧美视频毛片在线播放 | 欧美色图14p| 午夜婷婷精品午夜无码A片影院 | 好湿好紧水多AAAAA片秀人网 | 午夜伦yy44880影院 | 97资源站超碰在线视频 | 精品久久久久中文字幕加勒比东京热 | SORA是什么意思 | 妈妈的职业3完整版在线播放 | 亚洲精品一区国产欧美 | 99re久久热在线播放8 | 日本邪恶全彩工囗囗番海贼王 | 色婷婷五月综合中文字幕 | 两个洞一起插哦!好刺激 | 少妇一夜未归暴露妓女身份 | 久久这里只有精品视频9 | 影音先锋色av男人资源网 | 色婷婷激情AV精品影院 | 免费毛片视频网站 | 国产九九九九九九九A片 | 国产亚洲精品影视在线 | 不用播放器的黄 | 午夜福利免费视频921000电影 | 老阿姨儿子一二三区 | 精品国产福利在线视频 | 成人在线观看国产 | 樱桃熟了A级毛片 | a一级一片免费观看视频 | 亚洲欧美日韩另类精品一区二区三区 | 在线观看免费小视频 | 亚洲免费一区二区 | 蝴蝶中文综合娱乐网2 | 亚洲性无码AV久久成人 | 4484在线观看视频 | 久久精品国产亚洲AV妓女不卡 | 亚洲高清国产拍精品动图 | 亚洲精品久久久久久久蜜臀老牛 | 午夜国产福利 |