公司這套架構(gòu)統(tǒng)一處理try...catch這么香孵户,求求你不要再滿屏寫了萧朝,再發(fā)現(xiàn)扣績效!

前言

軟件開發(fā)springboot項(xiàng)目過程中夏哭,不可避免的需要處理各種異常,spring mvc 架構(gòu)中各層會(huì)出現(xiàn)大量的try {...} catch {...} finally {...} 代碼塊检柬,不僅有大量的冗余代碼,而且還影響代碼的可讀性。這樣就需要定義個(gè)全局統(tǒng)一異常處理器何址,以便業(yè)務(wù)層再也不必處理異常里逆。

推薦理由

  • 代碼復(fù)制到項(xiàng)目中通過簡單的配置即可實(shí)現(xiàn)

  • 可以靈活的根據(jù)自己的業(yè)務(wù)異常進(jìn)行更細(xì)粒度的擴(kuò)展

實(shí)踐

1.封裝統(tǒng)一返回結(jié)果類

image.png
public class AjaxResult {
 //是否成功
    private Boolean success;
    //狀態(tài)碼
    private Integer code;
    //提示信息
    private String msg;
    //數(shù)據(jù)
    private Object data;
    public AjaxResult() {

    }
    //自定義返回結(jié)果的構(gòu)造方法
    public AjaxResult(Boolean success,Integer code, String msg,Object data) {
        this.success = success;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    //自定義異常返回的結(jié)果
    public static AjaxResult defineError(BusinessException de){
     AjaxResult result = new AjaxResult();
        result.setSuccess(false);
        result.setCode(de.getErrorCode());
        result.setMsg(de.getErrorMsg());
        result.setData(null);
        return result;
    }
    //其他異常處理方法返回的結(jié)果
    public static AjaxResult otherError(ErrorEnum errorEnum){
     AjaxResult result = new AjaxResult();
        result.setMsg(errorEnum.getErrorMsg());
        result.setCode(errorEnum.getErrorCode());
        result.setSuccess(false);
        result.setData(null);
        return result;
    }
 public Boolean getSuccess() {
  return success;
 }
 public void setSuccess(Boolean success) {
  this.success = success;
 }
 public Integer getCode() {
  return code;
 }
 public void setCode(Integer code) {
  this.code = code;
 }
 public String getMsg() {
  return msg;
 }
 public void setMsg(String msg) {
  this.msg = msg;
 }
 public Object getData() {
  return data;
 }
 public void setData(Object data) {
  this.data = data;
 }

}

2 自定義異常封裝類

image.png
public class BusinessException extends RuntimeException {
 private static final long serialVersionUID = 1L;
 /**
  * 錯(cuò)誤狀態(tài)碼
  */
 protected Integer errorCode;
 /**
  * 錯(cuò)誤提示
  */
 protected String errorMsg;

 public BusinessException(){

     }

 public BusinessException(Integer errorCode, String errorMsg) {
         this.errorCode = errorCode;
         this.errorMsg = errorMsg;
     }

 public Integer getErrorCode() {
  return errorCode;
 }

 public void setErrorCode(Integer errorCode) {
  this.errorCode = errorCode;
 }

 public String getErrorMsg() {
  return errorMsg;
 }

 public void setErrorMsg(String errorMsg) {
  this.errorMsg = errorMsg;
 }
}

3 錯(cuò)誤枚舉,拒絕硬編碼

image.png
public enum ErrorEnum {
 // 數(shù)據(jù)操作錯(cuò)誤定義
 SUCCESS(200, "成功"),
 NO_PERMISSION(403,"你沒得權(quán)限"),
 NO_AUTH(401,"未登錄"),
 NOT_FOUND(404, "未找到該資源!"),
 INTERNAL_SERVER_ERROR(500, "服務(wù)器異常請聯(lián)系管理員"),
 ;

 /** 錯(cuò)誤碼 */
 private Integer errorCode;

 /** 錯(cuò)誤信息 */
 private String errorMsg;

 ErrorEnum(Integer errorCode, String errorMsg) {
  this.errorCode = errorCode;
  this.errorMsg = errorMsg;
 }

    public Integer getErrorCode() {
        return errorCode;
    }

    public String getErrorMsg() {
        return errorMsg;
    }
}

4 全局異常處理類

image.png
/**
 * 全局異常處理器
 * 
 */
@RestControllerAdvice
public class GlobalExceptionHandler
{
    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 處理自定義異常
     *
     */
    @ExceptionHandler(value = BusinessException.class)
    public AjaxResult bizExceptionHandler(BusinessException e) {
     log.error(e.getMessage(), e);
        return AjaxResult.defineError(e);
    }

    /**
     * 處理其他異常
     *
     */
    @ExceptionHandler(value = Exception.class)
    public AjaxResult exceptionHandler( Exception e) {
      log.error(e.getMessage(), e);
        return AjaxResult.otherError(ErrorEnum.INTERNAL_SERVER_ERROR);

    }

}

5 測試

image.png

返回結(jié)果:

image.png

添加描述

總結(jié):

小編總結(jié)了2020面試題用爪,這份面試題的包含的模塊分為19個(gè)模塊原押,分別是: Java 基礎(chǔ)、容器偎血、多線程诸衔、反射、對象拷貝颇玷、Java Web 笨农、異常、網(wǎng)絡(luò)帖渠、設(shè)計(jì)模式谒亦、Spring/Spring MVC、Spring Boot/Spring Cloud空郊、Hibernate份招、MyBatis、RabbitMQ渣淳、Kafka脾还、Zookeeper、MySQL入愧、Redis鄙漏、JVM 。

關(guān)注我的公眾號:程序員白楠楠棺蛛,獲取上述資料怔蚌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旁赊,隨后出現(xiàn)的幾起案子桦踊,更是在濱河造成了極大的恐慌,老刑警劉巖终畅,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件籍胯,死亡現(xiàn)場離奇詭異,居然都是意外死亡离福,警方通過查閱死者的電腦和手機(jī)杖狼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妖爷,“玉大人蝶涩,你說我怎么就攤上這事。” “怎么了绿聘?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵嗽上,是天一觀的道長。 經(jīng)常有香客問我熄攘,道長兽愤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任鲜屏,我火速辦了婚禮烹看,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洛史。我一直安慰自己惯殊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布也殖。 她就那樣靜靜地躺著土思,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忆嗜。 梳的紋絲不亂的頭發(fā)上己儒,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音捆毫,去河邊找鬼闪湾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绩卤,可吹牛的內(nèi)容都是我干的途样。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼濒憋,長吁一口氣:“原來是場噩夢啊……” “哼何暇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凛驮,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裆站,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后黔夭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宏胯,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年本姥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了胳嘲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扣草,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辰妙,我是刑警寧澤鹰祸,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站密浑,受9級特大地震影響蛙婴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尔破,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一街图、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懒构,春花似錦餐济、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秩霍,卻和暖如春篙悯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背铃绒。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工鸽照, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颠悬。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓矮燎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椿疗。 傳聞我的和親對象是個(gè)殘疾皇子漏峰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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