全局異常處理:
1. Throwable是所有錯誤或異常的超類。Throwable類有兩個直接子類:Error類和Exception類。
2. Error類和Exception類
1、Error是指java運行時系統的內部錯誤和資源耗盡錯誤,是程序無法處理的異常,應用程序不會拋出該類對象。
2、Exception是程序本身可以處理的異常,應儘可能去處理這些異常。Exception分兩類,一個是運行時異常RuntimeException,一個是檢查異常CheckedException。
3、CheckedException一般是外部錯誤,這種異常都發生在編譯階段,Java編譯器會強制程序去捕獲此類異常。
4、RuntimeException是那些可能在Java 虛擬機正常運行期間拋出的異常的超類。這種錯誤是由程序員引起的錯誤,可以修正代碼解決。
3. 用@ControllerAdvice+@ExceptionHandler實現全局異常處理
通常在Controller層需要去捕獲service層的異常,防止返回一些不友好的錯誤信息到客戶端,但如果Controller層每個方法都用模塊化的try-catch代碼去捕獲異常,會很難看也難維護。
異常處理最好是解耦的,並且都放在一個地方集中管理。Spring能夠較好的處理這種問題,核心如下,這裏主要關注前兩個:
@ExceptionHandler:統一處理某一類異常,從而能夠減少代碼重複率和複雜度
@ControllerAdvice:異常集中處理,更好的使業務邏輯與異常處理剝離開
@ResponseStatus:可以將某種異常映射爲HTTP狀態碼
單使用@ExceptionHandler,只能在當前Controller中處理異常,與@ControllerAdvice組合使用,則可以實現全局異常處理,不用每個controller都配置。
- 代碼
@ControllerAdvice
public class MyControllerAdvice {
@ResponseBody
@ExceptionHandler(value = Exception.class)
public String errorHandler(Exception ex) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("code", -2);
jsonObject.put("msg", ex.getMessage());
return AESUtil.encryptCbcMode(jsonObject.toString());
}
- 自定義404頁面,建立\static\error\404.html即可覆蓋SpringBoot默認頁面