1. 程式人生 > >springboot-統一返回資料,自定義異常,異常處理

springboot-統一返回資料,自定義異常,異常處理

springboot-統一返回資料,統一異常處理,自定義異常

程式碼下載:
https://github.com/2010yhh/springBoot-demos.git

環境

idea2018,jdk1.8,

springboot版本:1.5.9.RELEASE

1.java異常

Java 提供了兩類主要的異常 :runtime exception(預期異常和執行時異常) 和 checked exception (預期異常)

出現執行時異常後,系統會把異常一直往上層拋,一直遇到處理程式碼。如果沒有處理塊,到最上層,如果是多執行緒就由Thread.run() 丟擲 ,如果是單執行緒就被 main() 丟擲 。丟擲之後,如果是執行緒,這個執行緒也就退出了。如果是主程式丟擲的異常,那麼這整個程式也就退出了。

場景:一般像ssm這種遇到未捕獲的異常,不能影響其他的操作,必須處理;

但是:有些場景要求

1.1常見的幾種異常

輸入輸出異常:IOException
算術異常類:ArithmeticExecption
空指標異常類:NullPointerException
型別強制轉換異常:ClassCastException

操作資料庫異常:SQLException

檔案未找到異常:FileNotFoundException
陣列負下標異常:NegativeArrayException
陣列下標越界異常:ArrayIndexOutOfBoundsException
違背安全原則異常:SecturityException
檔案已結束異常:EOFException
字串轉換為數字異常:NumberFormatException
方法未找到異常:NoSuchMethodException

1.2異常的處理

try catch是直接處理,處理完成之後程式繼續往下執行,

throw則是將異常拋給它的上一級處理,程式便不往下執行了使用throws繼續向上丟擲異常

ry catch一般在最上層使用,底層的都使用throws向上丟擲。如果即在最上層做try catch,又在底層方法做try catch,程式
會變的很混亂。一般可預見的錯誤,比如空指標,你完全可以在最上層比如controller層進行判斷下,不要讓null進入底層方法引起不必要的麻煩,
你也省的給底層和上層方法都加預防空指標異常的判斷。

ssm開發中通常:丟擲異常後,前端跳轉到某個頁面或者根據返回的狀態碼,給出提示操作或者根據狀態碼做跳轉頁面

dao層一個拋給service層,service層再拋給Controller層,Controller層catch記錄錯誤資訊,

同時controller層返回給前端狀態碼和錯誤資訊,前端根據狀態碼做處理:根據狀態碼顯示不同資訊,同時將異常作為提示資訊顯示在前端。

或者:

系統的dao、service、controller出現都通過throws Exception向上丟擲,最後由springmvc前端控制器交由異常處理器進行異常處理

1.3統一返回值

public class ResultUtil {
    public static Result success() {
        return success(null);
    }
    public static Result success(Object object) {
        Result result = new Result();
        result.setCode(ResultCode.SUCCESS);
        result.setMsg("成功");
        result.setData(object);
        return result;
    }
    public static Result success(Integer code,Object object) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg("成功");
        result.setData(object);
        return result;
    }

    public static Result error( String msg) {
        Result result = new Result();
        result.setCode(ResultCode.ERROR);
        result.setMsg(msg);
        return result;
    }
    public static Result error(Integer code, String msg) {
        Result result = new Result();
        result.setCode(code);
        result.setMsg(msg);
        return result;
    }
}

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述