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

溫馨提示×

溫馨提示×

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

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

SpringBoot 2 統一異常處理過程解析

發布時間:2020-10-23 06:35:24 來源:腳本之家 閱讀:187 作者:桌前明月 欄目:編程語言

統一異常處理相關注解介紹

@ControllerAdvice

聲明在類上用于指定該類為控制增強器類,如果想聲明返回的結果為 RESTFull 風格的數據,需要在聲明 @ExceptionHandler 注解的方法上同時加 上 @ResponseBody

@RestControllerAdvice

聲明在類上用于指定該類為控制增強器類。并聲明返回的結果為 RESTFull 風格的數據,無需在聲明@ExceptionHandler 注解的方法上加@ResponseBody

@ExceptionHandler

聲明在方法上用于指定需要統一攔截的異常。例如:@ExceptionHandler(value = Exception.class)

實戰操作

定義消息類:

定義 RESTFull 返回 JSON 數據的消息類,其中包含成員變量如下:

  • code:錯誤碼,0表示沒有異常信息。
  • message:異常提示信息。
  • date:無異常是返回具體內容信息。
public class ReturnMessage<T> {
  private Integer code;//錯誤碼
  private String message;//提示信息
  private T date;//返回具體內容
  public ReturnMessage(Integer code, String message, T date) {
    super();
    this.code = code;
    this.message = message;
    this.date = date;
  }
  //省略get and set方法  
}

** 消息類處理工具類:**

主要是用來處理成功或失敗消息處理,該工具類主要包含是3個方法 :

  1. 成功處理含實體數據
  2. 成功處理 沒有實體數據
  3. 失敗處理

具體代碼如下:

public class ReturnMessageUtil {
  /**
   * 無異常 請求成功并有具體內容返回
   * @param object
   * @return
   */
  public static ReturnMessage<Object> sucess(Object object) {
    ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);
    return message;
  }
  /**
   * 無異常 請求成功并無具體內容返回
   * @return
   */
  public static ReturnMessage<Object> sucess() {
    ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null);
    return message;
  }
  /**
   * 有自定義錯誤異常信息
   * @param code
   * @param msg
   * @return
   */
  public static ReturnMessage<Object> error(Integer code,String msg) {
    ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null);
    return message;
  }
 }

自定義異常類:

我們通過自定義系統異常類來完成校驗相關的操作,自定義系統異常類通過繼承 RuntimeException ,然后聲明名稱為 code 的成員變量來表示不同類型異常。

主要是用于異常攔截后獲取自定義異常的 code ,并將code 設置到消息類中。

public class SbException extends RuntimeException{
  private Integer code; 
  public Integer getCode() {
    return code;
  }
  public void setCode(Integer code) {
    this.code = code;
  }  
  public SbException(Integer code,String message) {
    super(message);
    this.code = code;
  }  
}

定義統一異常攔截類:

通過聲明 @RestControllerAdvice 表示該類為 RESTFul 風格的異常處理控制增強器類,在 handle 方法聲明 @ExceptionHandler 并在該注解中指定要攔截的異常類。具體代碼如下:

@RestControllerAdvice
public class ExceptionHandle {
  private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
  
  @ExceptionHandler(value = Exception.class)
  public ReturnMessage<Object> handle(Exception exception) {
    if(exception instanceof SbException) {
      SbException sbexception = (SbException)exception;
      return ReturnMessageUtil.error(sbexception.getCode(), sbexception.getMessage());
    }else {
      logger.error("系統異常 {}",exception);
      return ReturnMessageUtil.error(-1, "未知異常"+exception.getMessage());
    }
  }
}

測試

分別測試自定義異常和系統異常,通過 /error/custome 測試自定義異常,通過 /error/unknown 測試未知的系統異常。具體代碼如下:

@RestController
@RequestMapping("/error")
public class DemoException {  
  @GetMapping(value = "custome")
  public void customException() {
    SbException sbe = new SbException(100, "這個是自定義異常!");
    throw sbe;
  }
  @GetMapping(value = "unknown")
  public void unknownException() {
    int i = 0;
    int b = 1/i;
  }
}

測試結果:

SpringBoot 2 統一異常處理過程解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

闵行区| 兖州市| 天峨县| 铅山县| 陇川县| 黎平县| 澄江县| 泾阳县| 德庆县| 宁城县| 安泽县| 渭南市| 嘉义县| 闸北区| 磐安县| 桃源县| 富宁县| 宜良县| 静宁县| 丹东市| 山东省| 铁岭市| 新建县| 邵武市| 满洲里市| 商河县| 太湖县| 公主岭市| 开鲁县| 合阳县| 信宜市| 建平县| 嘉峪关市| 宝兴县| 长汀县| 马公市| 大关县| 绥芬河市| 收藏| 瑞昌市| 元阳县|