91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

大方县| 深泽县| 东平县| 砚山县| 通江县| 恩施市| 九台市| 蓬溪县| 奉新县| 镇坪县| 上犹县| 英吉沙县| 广东省| 昔阳县| 高要市| 福海县| 密山市| 岳阳市| 井研县| 丰宁| 温泉县| 乌兰浩特市| 拉孜县| 宕昌县| 教育| 堆龙德庆县| 独山县| 大理市| 开江县| 平远县| 天镇县| 乌苏市| 宜都市| 疏勒县| 全州县| 论坛| 滁州市| 岫岩| 汶上县| 三原县| 综艺|