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

dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter

 更新時(shí)間:2023年03月21日 11:25:03   作者:自東向西  
這篇文章主要介紹了dubbo將異常轉(zhuǎn)換成RuntimeException的原因分析?ExceptionFilter問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

問題

開發(fā)過程中,發(fā)現(xiàn)服務(wù)提供者拋出了自定義的BusinessException,到了消費(fèi)者這邊,卻變成了RuntimeException。

客戶端這邊有BusinessException這個(gè)類,提供者拋出的也是這個(gè)類的異常,為什么會(huì)被轉(zhuǎn)成RpcException呢?

代碼分析

看ExceptionFilter的代碼:

重點(diǎn)就在圈起來的3個(gè)地方:

1、有異常,而且接口不能是GenericService才需要判斷是否需要轉(zhuǎn)換成RuntimeException,不然直接返回result。

2、如果是受檢異常,則不轉(zhuǎn)換,直接返回。

3、如果不是受檢異常,則需要判斷該異常是否在方法上聲明拋出,如果有聲明就不轉(zhuǎn)換,直接返回。

如果不是上面的這三種情況,就會(huì)去到兜底邏輯:

兜底判斷也是有三點(diǎn):

1、判斷接口和異常是否在一個(gè)jar包中,如果是在一個(gè)jar包,不需要轉(zhuǎn)換成RuntimeException。

2、如果異常是java異常,不需要處理。

3、異常類型是RpcException,不需要處理。?

如果這三者都不滿足,就會(huì)到達(dá)代碼:

return new RpcResult(new RuntimeException(StringUtils.toString(exception)));

異常會(huì)被轉(zhuǎn)成字符串,作為RuntimeException的構(gòu)造函數(shù)入?yún)ⅰ?/p>

結(jié)論

由于BusinessException是在一個(gè)通用工具包中,和接口不在一個(gè)jar包中,BusinessException也不是受檢異常,所以不滿足不轉(zhuǎn)換的條件。

要讓提供者拋出的異常不被轉(zhuǎn)成RuntimeException,可以在定義方法的時(shí)候,聲明 throws BusinessException。

思考

為什么dubbo要這樣判斷是否需要轉(zhuǎn)成RuntimeException呢?

個(gè)人覺得,依據(jù)是消費(fèi)者能否反序列化成對(duì)應(yīng)的異常類,消費(fèi)端有拋出的這個(gè)異常類,就能成功反序列化。

1、能拋出受檢異常,那么在方法上必然聲明了拋出該異常,客戶端包里會(huì)有該異常類

2、同理,如果不是受檢異常,但是在方法上聲明了,客戶端也會(huì)有

3、如果接口和異常類是在同一個(gè)jar吧,說明客戶端包里有異常類

4、jdk自己的異常類,自然是存在的

5、RpcException是dubbo自己的異常類,消費(fèi)者必然也有

最后

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

相關(guān)文章

  • java equals函數(shù)用法詳解

    java equals函數(shù)用法詳解

    java 中equals函數(shù)的使用方法是廣大java愛好者所關(guān)心的一個(gè)話題,本文將詳細(xì)介紹其使用方法,需要了解的朋友可以參考下
    2012-11-11
  • Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler)

    Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler)

    這篇文章主要介紹了Eclipse中安裝反編譯工具Fernflower的方法(Enhanced Class Decompiler),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Swing常用組件之單選按鈕和復(fù)選框

    Swing常用組件之單選按鈕和復(fù)選框

    Swing是一個(gè)用于開發(fā)Java應(yīng)用程序用戶界面的開發(fā)工具包,這篇文章主要介紹了Swing常用組件之單選按鈕和復(fù)選框,感興趣的朋友可以參考一下
    2016-05-05
  • AQS同步組件CyclicBarrier循環(huán)屏障用例剖析

    AQS同步組件CyclicBarrier循環(huán)屏障用例剖析

    這篇文章主要為大家介紹了AQS同步組件CyclicBarrier循環(huán)屏障用例剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 使用Java的Graphics類進(jìn)行繪圖的方法詳解

    使用Java的Graphics類進(jìn)行繪圖的方法詳解

    這篇文章主要介紹了使用Java的Graphics類進(jìn)行繪圖的方法,是Java的GUI編程的基礎(chǔ),需要的朋友可以參考下
    2015-10-10
  • 初探Java內(nèi)部類的使用

    初探Java內(nèi)部類的使用

    Java內(nèi)部類一般可以分為以下三種:成員內(nèi)部類、靜態(tài)內(nèi)部類和匿名內(nèi)部類。這篇文章主要帶大家初探一下Java內(nèi)部類的使用,感興趣的可以了解一下
    2022-09-09
  • SpringBoot學(xué)習(xí)系列之MyBatis Plus整合封裝的實(shí)例詳解

    SpringBoot學(xué)習(xí)系列之MyBatis Plus整合封裝的實(shí)例詳解

    MyBatis-Plus是一款MyBatis的增強(qiáng)工具(簡(jiǎn)稱MP),為簡(jiǎn)化開發(fā)、提高效率,這篇文章給大家介紹MyBatis Plus整合封裝的實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧
    2020-08-08
  • Java如何獲取JSON中某個(gè)對(duì)象的值

    Java如何獲取JSON中某個(gè)對(duì)象的值

    這篇文章主要介紹了Java如何獲取JSON中某個(gè)對(duì)象的值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringCloud Zuul基本使用方法匯總

    SpringCloud Zuul基本使用方法匯總

    這篇文章主要介紹了SpringCloud Zuul基本使用方法匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Mybatis choose when用法實(shí)例代碼

    Mybatis choose when用法實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了Mybatis choose when用法,需要的的朋友參考下吧
    2017-06-06

最新評(píng)論

陆河县| 乌海市| 垦利县| 肃宁县| 芜湖县| 乌兰察布市| 革吉县| 博客| 玉龙| 佳木斯市| 镇赉县| 旅游| 鹿邑县| 保德县| 长治县| 满城县| 新余市| 松阳县| 普格县| 遂平县| 邵阳县| 洪湖市| 麻城市| 清水县| 子长县| 微博| 如皋市| 上饶县| 浮山县| 田林县| 福建省| 金山区| 安顺市| 台中市| 高陵县| 英超| 赤壁市| 西充县| 城口县| 桂东县| 秀山|