SpringBoot小技巧:統一異常處理

SpringBoot小技巧:統一異常處理

情景描述

  對於接口的定義,我們通常會有一個固定的格式,比如:

  

  但是調用方在請求我們的API時把接口地址寫錯了,就會得到一個404錯誤,且不同於我們定義的數據格式。

  我們需要在發生這種系統錯誤時也能返回我們自定義的那種格式,就需要定義一個異常處理類,這個類既可以返回統一的格式,也可以統一記錄異常日誌

 

方法

  我們在@ExceptionHandler(value = Exception.class)中指明瞭異常器處理Exception及其子類。JsonResponse是我們返回格式的實體類,當發生異常時,會被封裝好並返回給調用方。 

@ControllerAdvice
public class GlobalExceptionHandler {

    private Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public JsonResponse defaultErrorHandler(HttpServletRequest request, HttpServletResponse response,Exception e){
        logger.error("",e);
        JsonResponse jsonResponse = new JsonResponse();
        jsonResponse.setMsg(e.getMessage());
        //[!] 單獨處理運行時異常
        if(e instanceof RuntimeException)
            jsonResponse.setStatus(500);
        else
            jsonResponse.setStatus(502);
        jsonResponse.setData(null);
        return jsonResponse;
    }
}

  

資料

@ControllerAdvice

  ControllerAdvice拆分開來就是Controller Advice,關於Advice,前面我們講解Spring Aop時講到,其是用於封裝一個切面所有屬性的,包括切入點和需要織入的切面邏輯。這裏ContrllerAdvice也可以這麼理解,其抽象級別應該是用於對Controller進行“切面”環繞的,而具體的業務織入方式則是通過結合其他的註解來實現的。@ControllerAdvice是在類上聲明的註解,其用法主要有三點:

  • 結合方法型註解@ExceptionHandler,用於捕獲Controller中拋出的指定類型的異常,從而達到不同類型的異常區別處理的目的
  • 結合方法型註解@InitBinder,用於request中自定義參數解析方式進行註冊,從而達到自定義指定格式參數的目的;
  • 結合方法型註解@ModelAttribute,表示其標註的方法將會在目標Controller方法執行之前執行。

 

參考鏈接

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章