簡單的全局異常處理

前言        

        之前讀大學的時候,在學校寫項目比較喜歡用到try-catch去捕獲異常,面試的時候面試官問我是怎麼處理異常的,我還是比較直白的說出只是簡單採用try-catch去實現。 但是之後有時候寫Controller層的時候如果一個個拋會比較麻煩,現在在學習到異常處理的,爲了讓代碼更容易維護,我創建一個類集中處理異常,上網查了下發現可以用  @RestControllerAdvice + @ExceptionHandler 兩個註解去實現簡單的全局異常捕獲。

一、首先還是先來點理論性的東西

@RestControllerAdvice是用於全局代碼異常捕獲,異常集中處理,更好的使業務邏輯與異常處理剝離開,與ControllerAdvice區別在於返回的數據是JSON字符串,同時跟RestController不太一樣。

@ExceptionHandler是統一處理某一類異常,從而能夠減少代碼重複率和複雜度,value值表示要捕捉的異常,可以寫多個,然後根據異常,就可以在這個方法裏面進行處理。

1. 這是整個異常類處理的代碼,裏面返回的Result實體是我自己定義的實體類

StatusCode.ERROR 也是自己定義的一個字符串,其實就是狀態碼,可自行定義。

BaseExceptionHandler.java

/**
 * 統一異常處理
 * Created by yhj on 2019/1/24.
 */
@RestControllerAdvice
public class BaseExceptionHandler {

    /**
     * 全局異常捕獲處理
     * @param e
     * @return
     */
    @ExceptionHandler(value = Exception.class)
    public Result error(Exception e){
        e.printStackTrace();
        return new Result(false, StatusCode.ERROR, e.getMessage());
    }
}

2. 這裏是Result實體類的代碼,Result.java

package entity;

/**
 * Created by yhj on 2019/1/24.
 */
public class Result {

    private boolean flag;
    private Integer code;
    private String message;
    private Object data;

    public Result() {
    }

    public Result(boolean flag, Integer code, String message) {
        this.flag = flag;
        this.code = code;
        this.message = message;
    }

    public Result(boolean flag, Integer code, String message, Object data) {
        this.flag = flag;
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
}

3. 寫到這裏,其實這個簡單的demo就完成了,經過測試也沒有問題,返回的也是自己所寫的實體JSON出錯信息。

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