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;
}
}