小白的springboot之路(十)、全局異常處理

0、前言

  任何系統,咱們不會傻傻的在每個地方進行異常捕獲和處理,整個系統通常咱們會在一個的地方統一進行異常處理,spring boot全局異常處理很簡單;前端

  介紹前先說點題外話,咱們如今開發系統,都是先後端徹底分離的,後端只提供RESTfull API,禁止涉及任何界面,什麼thymeleaf、JSP那些後端模板,是絕對禁止使用的,那些東西請扔垃圾箱,不要浪費大好青春去研究,那是墮落;前端則負責界面相關,經常使用Vue;若是公司還沒先後端分離,還在thymeleaf還在先後端一塊兒寫,那你仍是早作跳槽打算吧,他們養不起你,更養不起你的家人;web

  先後端分離,後端API,通常對於異常處理,要作得無非兩件事,spring

    1是記錄日誌及相應通知處理,這是對內的,後端

    2是給出返回結果給API調用者,這是對外的;架構

對API調用者來講,他只須要一個返回結果(包含錯誤代碼、提示信息),其餘的他不關心前後端分離

對後端來講,他只須要記錄日誌,通知或者給發佈相應消息給其餘隊列處理相關事項;spa

因此:看到過很多人封裝了不少個自定義異常類,其實,徹底沒有必要,只須要一個異常處理來處理全部異常便可,而後封裝一個錯誤識別碼和提示消息的枚舉,用於返回給API調用者;而後後端的處理,直接在一個異常處理方法中所有處理就好了,徹底不必封裝N多個自定義異常,那沒有任何意義;

 

0-一、關於異常的思想認識

  咱們應該認識到,一切異常,對系統來講,都是不正常的表現,都是屬於缺陷,都屬於BUG,儘管有些異常是咱們主動拋出的;架構設計

  咱們要作的,是應該儘可能提升系統可用性,最大限度避免任何異常的出現,而不是去期望完善異常處理來完善系統;設計

  異常處理,是異常沒法避免的出現了而採起的一種應急措施,主要目的是對外增長友好性,對內提供補救線索;日誌

  不要認爲完善的異常處理是系統核心,他不是,不要期望異常處理盡善盡美,不要期望異常處理來給系統缺陷擦屁股;

  若是系統異常過多,那麼你要作的不是去完善異常處理機制,而是要好好去反思:系統架構設計是否合理,系統邏輯設計是否合理;

 

一、全局異常處理

使用@ControllerAdvice、@ExceptionHandler註解封裝一個異常處理類便可
package com.anson.common.exception;

import com.anson.common.result.ResultBody;
import com.anson.common.result.ResultCode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @description: 全局異常處理類
 * @author: anson
 * @Date: 2019/12/17 20:56
 */

@ControllerAdvice
public class GlobalExceptionHandler
{
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 全部異常處理
     * @param e
     * @return
     */
    @ExceptionHandler(value =Exception.class)
    @ResponseBody
    public ResultBody exceptionHandler(Exception e)
    {
        //一、寫日誌及其餘處理,對內
        logger.error("未知異常!緣由是:",e);
        System.out.println("未知異常!緣由是:"+e);
        
        //二、返回錯誤識別碼和提示給API調用者、對外
        return ResultBody.failed(ResultCode.FAILED);
    }
}

這樣就能夠了,

ResultBody、ResultCode這個咱們下節會說到;
相關文章
相關標籤/搜索