springboot異常

springboot

參考了各個(gè)大佬的寫法与学,因?yàn)橹霸诒镜貙懙奈臋n趟径,但是沒有記錄鏈接,如有侵權(quán)癣防,請(qǐng)聯(lián)系本人

springboot異常處理

異常處理的最佳實(shí)踐,主要遵循幾點(diǎn)

  1. 盡量不要在代碼里面寫try catch finally
  2. 異常盡量要直觀掌眠,防止被他人誤解
  3. 將異常分為以下幾類:業(yè)務(wù)異常蕾盯,登錄狀態(tài)無效異常,未授權(quán)異常蓝丙,系統(tǒng)異常
  4. 可以在某個(gè)特定的controller中處理異常级遭,也可以使用全局異常處理器。盡量使用全局異常處理器

異常處理流程:

  1. 首先自定義一個(gè)自己的異常類CustomeException,繼承RuntimeException,再寫一個(gè)異常管理類ExceptionManager,用來拋出自定義的異常
  2. 然后使用spring提供的注解@RestControllerAdvice或者@ControllerAdvice寫一個(gè)統(tǒng)一異常處理的類渺尘,在這個(gè)類中寫一個(gè)帶一個(gè)@ExceptionHandler(Exception.calss)注解的方法挫鸽,這個(gè)方法接收到所有拋出的異常,在方法內(nèi)我們可以寫自己的異常處理邏輯
  3. 如果參數(shù)是CustomerException類型鸥跟,我們就自定義異常字典的錯(cuò)誤信息丢郊,如果是其他類型的異常就返回系統(tǒng)異常

talk is cheap盔沫,show me the code

  1. 自定義的異常類

    @Data
    @NoArgsConstructor
    public class CustomException extends RuntimeException {

    public CustomException(String code, String msg) {
        super(code);
        this.code = code;
        this.msg = msg;
    }
    
    private String code;
    
    private String msg;
    

    }

  2. 異常管理類

    @Component
    public class ExceptionManager {

    @Resource
    Environment environment;
    
    public CustomException create(String code) {
        return new CustomException(code, environment.getProperty(code));
    }
    

    }

    Environment 是spring的環(huán)境類,會(huì)包含所有properties文件的鍵值對(duì)

  1. 異常字典

sso異常測(cè)試

EC00001=SSO的WEB層錯(cuò)誤

需要加載到spring的環(huán)境中枫匾,我是用配置類加載的架诞,方式如下:

 @Component
 @PropertySource(value = {"exception.properties"}, encoding = "UTF-8")
 public class LoadProperty {

 }
  1. 全局異常捕獲類

    @RestControllerAdvice
    public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ApiResult handlerException(Exception e) {

     //如果是自定義的異常,返回對(duì)應(yīng)的錯(cuò)誤信息
     if (e instanceof CustomException) {
         e.printStackTrace();
         CustomException exception = (CustomException) e;
         return ApiResult.error(exception.getCode(), exception.getMsg());
     } else {
         //如果不是已知異常干茉,返回系統(tǒng)異常
         e.printStackTrace();
         return ApiResult.error("SYS_EXCEPTION", "系統(tǒng)異常");
     }
    

    }

}

  1. 使用示例

@RestController
@RequestMapping("/exception")
public class ExceptionController {

@Resource
ExceptionManager exceptionManager;

@RequestMapping("/controller")
public String exceptionInController() {
    if (true) {
        throw exceptionManager.create("EC00001");
    }
    return "controller exception!";
}

}

返回信息:

{
"code": "EC00001",
"msg": "SSO的WEB層錯(cuò)誤"
}

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谴忧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子角虫,更是在濱河造成了極大的恐慌沾谓,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戳鹅,死亡現(xiàn)場(chǎng)離奇詭異均驶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)粉楚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門辣恋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人模软,你說我怎么就攤上這事伟骨。” “怎么了燃异?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵携狭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我回俐,道長(zhǎng)逛腿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任仅颇,我火速辦了婚禮单默,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忘瓦。我一直安慰自己搁廓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布耕皮。 她就那樣靜靜地躺著境蜕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凌停。 梳的紋絲不亂的頭發(fā)上粱年,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音罚拟,去河邊找鬼台诗。 笑死完箩,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拉庶。 我是一名探鬼主播嗜憔,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼氏仗!你這毒婦竟也來了吉捶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤皆尔,失蹤者是張志新(化名)和其女友劉穎呐舔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慷蠕,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡珊拼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了流炕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澎现。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖每辟,靈堂內(nèi)的尸體忽然破棺而出剑辫,到底是詐尸還是另有隱情,我是刑警寧澤渠欺,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布妹蔽,位于F島的核電站,受9級(jí)特大地震影響挠将,放射性物質(zhì)發(fā)生泄漏胳岂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一舔稀、第九天 我趴在偏房一處隱蔽的房頂上張望乳丰。 院中可真熱鬧,春花似錦内贮、人聲如沸成艘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至断箫,卻和暖如春拂酣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仲义。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工婶熬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剑勾,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓赵颅,卻偏偏與公主長(zhǎng)得像虽另,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子饺谬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 通常情況下捂刺,在一個(gè)系統(tǒng)中,抽象出公用的部分的過程是一個(gè)DRY的一個(gè)過程募寨。這是所有計(jì)算機(jī)工程中的一個(gè)準(zhǔn)則族展。防止重復(fù)是...
    OrangeHunter閱讀 1,629評(píng)論 0 8
  • 前言 在springboot項(xiàng)目中,一般我們?cè)L問不存在的資源或內(nèi)部服務(wù)報(bào)錯(cuò)拔鹰,會(huì)報(bào)下面的異常頁(yè)面仪缸,這是springb...
    二月_春風(fēng)閱讀 6,830評(píng)論 1 10
  • 一、自定義錯(cuò)誤頁(yè)面 springBoot默認(rèn)的處異常的機(jī)制:SpringBoot默認(rèn)的已經(jīng)提供了一套處理異常的機(jī)制...
    jiahzhon閱讀 872評(píng)論 0 1
  • 下面的示例中對(duì)請(qǐng)求進(jìn)行驗(yàn)證列肢,并添加自定義的錯(cuò)誤信息處理恰画。 1. 創(chuàng)建 rest api 和模型類 Employee...
    SlowGO閱讀 240評(píng)論 0 0
  • 異常: 或者 這是引文在啟動(dòng)springboot 的時(shí)候,沒有關(guān)閉端口號(hào)8080(或者自定義的端口號(hào))瓷马,需要進(jìn)行手...
    氨基鈉閱讀 1,169評(píng)論 0 0