異常處理機制
異常處理的兩種方式:
編程式異常處理:是指在代碼中顯式地編寫處理異常的邏輯。它通常涉及到對異常類型的檢測及其處理,例如使用 try-catch 塊來捕獲異常,然后在 catch 塊中編寫特定的處理代碼,或者在 finally 塊中執行一些清理操作。
聲明式異常處理:將異常處理的邏輯從具體的業務邏輯中分離出來,通過配置等方式進行統一的管理和處理。在聲明式異常處理中,開發人員只需要為方法或類標注相應的注解(如 @Throws 或 @ExceptionHandler),就可以處理特定類型的異常。相較于編程式異常處理,聲明式異常處理可以使代碼更加簡潔、易于維護和擴展。
聲明式異常處理方式
1/聲明全局異常處理器控制類
/*** projectName: com.atguigu.execptionhandler* * description: 全局異常處理器,內部可以定義異常處理Handler!*//*** @RestControllerAdvice = @ControllerAdvice + @ResponseBody* @ControllerAdvice 代表當前類是全局異常處理器 * @ResponseBody 代表不映射試圖,直接返回字符串給客戶端*/
@RestControllerAdvice
public class GlobalExceptionHandler {}
2/在控制類中聲明異常處理handler方法
異常處理handler方法和普通的handler方法參數接收和響應都一致!
只不過異常處理handler方法要映射異常,發生對應的異常會調用!
普通的handler方法要使用@RequestMapping注解映射路徑,發生對應的路徑調用!
異常處理handler 使用? @ExceptionHandler(HttpMessageNotReadableException.class)? 注解指定發生HttpMessageNotReadableException異常時調用該方法!
package com.xin.config; /*** projectName: com.atguigu.execptionhandler* * description: 全局異常處理器,內部可以定義異常處理Handler!*/import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;/*** @RestControllerAdvice = @ControllerAdvice + @ResponseBody* @ControllerAdvice 代表當前類是全局異常處理器 * @ResponseBody 代表不映射試圖,直接返回字符串給客戶端*/
@RestControllerAdvice
public class GlobalExceptionHandler {/*** 異常處理handler** @param e 獲取異常對象!* @return 返回handler處理結果!* @ExceptionHandler(HttpMessageNotReadableException.class) 該注解標記異常處理Handler, 并且指定發生異常調用該方法!*/@ExceptionHandler(HttpMessageNotReadableException.class)public Object handlerJsonDateException(HttpMessageNotReadableException e) {return null;}/*** 當發生空指針異常會觸發此方法!** @param e* @return*/@ExceptionHandler(NullPointerException.class)public Object handlerNullException(NullPointerException e) {return null;}/*** 所有異常都會觸發此方法!但是如果有具體的異常處理Handler!* 具體異常處理Handler優先級更高!* 例如: 發生NullPointerException異常!* 會觸發handlerNullException方法,不會觸發handlerException方法!** @param e* @return*/@ExceptionHandler(Exception.class)public Object handlerException(Exception e) {return null;}
}