天天看點

@RestControllerAdvice 全局異常捕獲處理

全局異常捕獲處理

對于系統進行全局的異常處理。

@RestControllerAdvice
public class AppExceptionHandler {
    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * 處理自定義異常
     *  AppException  自定義 運作時異常
     *  ResultInfo  自定義統一傳回類,使用者前後端分離
     */
    @ExceptionHandler(AppException.class)
    public ResultInfo handleAppException(AppException e){
        ResultInfo r = new ResultInfo();
        r.put("code", e.getCode());
        r.put("msg", e.getMessage());
        logger.error("<全局異常> - [使用者自定義異常] code:{}, msg:{}", e.getCode(), e.getMsg(), e);
        return r;
    }

    @ExceptionHandler(NoHandlerFoundException.class)
    public ResultInfo handlerNoFoundException(Exception e) {
        // logger.error(e.getMessage(), e);
        logger.error("<全局異常> - [使用者自定義異常] code:{}, msg:{}", 404, "路徑不存在,請檢查路徑是否正确", e);
        return ResultInfo.error(404, "路徑不存在,請檢查路徑是否正确");
    }

    @ExceptionHandler(DuplicateKeyException.class)
    public ResultInfo handleDuplicateKeyException(DuplicateKeyException e){
        //logger.error(e.getMessage(), e);
        logger.error("<全局異常> - [使用者自定義異常] code:{}, msg:{}", 1001, "資料庫中已存在該記錄", e);
        return ResultInfo.error("資料庫中已存在該記錄");
    }

    @ExceptionHandler(AuthorizationException.class)
    public ResultInfo handleAuthorizationException(AuthorizationException e){
        //logger.error(e.getMessage(), e);
        logger.error("<全局異常> - [使用者自定義異常] code:{}, msg:{}", 403, "沒有權限,請聯系管理者授權", e);
        return ResultInfo.error("沒有權限,請聯系管理者授權");
    }

	// Exception  異常放在最後來處理
    @ExceptionHandler(Exception.class)
    public ResultInfo handleException(Exception e){
        logger.error(e.getMessage(), e);
        return ResultInfo.error();
    }
}