中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot處理全局異常的示例

發布時間:2021-02-08 09:26:32 來源:億速云 閱讀:109 作者:小新 欄目:編程語言

小編給大家分享一下SpringBoot處理全局異常的示例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

開發準備

JDK8、正常的springboot項目

代碼編寫

通用異常處理

其實Spring系列的項目全局異常處理方式早已存在,只不過我們一直忙于搬磚,很少停下腳步去審視這個日夜與我們相伴的朋友。為了貼合主題,本次主要針對SpringBoot全局異常處理進行舉例說明。

SpringBoot中有一個@ControllerAdvice的注解,使用該注解即表示開啟全局異常捕獲,接下來我們只需在自定義的方法上使用@ExceptionHandler注解,并定義捕獲異常的類型,對這種類型的異常進行統一的處理。

舉個例子:

假如我們需要針對NullException(空指針異常,是Java程序員最痛恨的異常,沒有之一)進行全局處理(如下所示)。

@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
   * 處理空指針的異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value =NullPointerException.class)
  public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){
    log.error("發生空指針異常!原因是:",e);
    return ResponseUtil.error(ResponseCode.ERROR);
  }
}

訥,就這么簡單。其他可能發生的異常,都可以以這種方式處理快速處理。此處大家應該表現的十分興奮,但請不要高興太早,因為接下來,有更令激動人心的事情。

自定義異常處理

自定義一個異常

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;

/**
 * @Description 自定義異常
 * @Date 2019-08-05 15:49
 * @Created by 程序員小明
 */
@Data
@AllArgsConstructor
@Accessors(chain = true)
public class BizException extends RuntimeException {
  /**
   * 錯誤碼
   */
  protected Integer errorCode;
  /**
   * 錯誤信息
   */
  protected String errorMsg;
}

顯而易見,這個異常繼承了RuntimeException,屬于運行時異常。細心的朋友已經發現,我使用了Lombok插件,非常契合今天的主題,給大家簡單介紹一下:

lombok是一個可以幫助我們簡化java代碼編寫的工具類,尤其是簡化javabean的編寫,即通過采用注解的方式,消除代碼中的構造方法,getter/setter等代碼,使我們寫的類更加簡潔(如果使用的IDE是idea,需要安裝插件哈)。

定義過之后,我們就可以和之前處理NullException方式一樣處理我們自定義的異常。包括處理其他異常,都是這種方式。直接貼代碼。

@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {

  /**
   * 處理自定義的業務異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value = BizException.class)
  public BaseResponseFacade bizExceptionHandler(HttpServletRequest req, BizException e){
    log.error("發生業務異常!原因是:{}",e.getErrorMsg());
    return ResponseUtil.error(e.getErrorCode(),e.getErrorMsg());
  }

  /**
   * 處理空指針的異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value =NullPointerException.class)
  public BaseResponseFacade exceptionHandler(HttpServletRequest req, NullPointerException e){
    log.error("發生空指針異常!原因是:",e);
    return ResponseUtil.error(ResponseCode.ERROR);
  }


  /**
   * 處理其他異常
   * @param req
   * @param e
   * @return
   */
  @ExceptionHandler(value =Exception.class)
  public BaseResponseFacade exceptionHandler(HttpServletRequest req, Exception e){
    log.error("未知異常!原因是:",e);
    return ResponseUtil.error(ResponseCode.INTERNAL_SERVER_ERROR);
  }
}

整個全局異常處理方式核心就是以上介紹這些。下面用一個Demo給大家舉個例子

@GetMapping("/test")
public BaseResponseFacade test(){
 if(true){
  throw new BizException(1,"error");
 }
 return ResponseUtil.success();
}

地址欄請求,進入這個方法后,會拋出異常,此時全局異常生效,就會返回異常處理過后的信息

{"errorCode":1,"errorMsg":"error","data":null}

以上是“SpringBoot處理全局異常的示例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

交城县| 商南县| 武义县| 中卫市| 襄城县| 德州市| 蕉岭县| 怀化市| 思南县| 信阳市| 英山县| 苏州市| 涞源县| 石屏县| 丹巴县| 池州市| 新和县| 古田县| 鲜城| 许昌市| 古交市| 宁河县| 夏津县| 康马县| 泊头市| 广安市| 高雄市| 家居| 邓州市| 吉隆县| 正安县| 金秀| 凉山| 贺兰县| 六盘水市| 尼木县| 台东县| 武定县| 宾阳县| 会东县| 石城县|