項目剛剛開發的時候,并沒有做好充足的準備。開發到一定程度的時候才會想到還有一些問題沒有解決。就比如今天我要說的一個問題:異常的處理。寫程式的時候一般都會通過try...catch...finally對異常進行處理,但是我們真的能在寫程式的時候處理掉所有可能發生的異常嗎? 以及發生異常的時候執行什麼邏輯,傳回什麼提示資訊,跳轉到什麼頁面,這些都是要考慮到的。
@ControllerAdvice注解内部使用@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法應用到所有的 @RequestMapping注解的方法。本例子中使用ExceptionHandler應用到所有@RequestMapping注解的方法,處理發生的異常。
示例代碼:
如果不起作用,請檢查 spring-mvc的配置檔案,是否有ControllerAdvice的如下配置
1.處理controller層的異常 WebExceptionAspect.java
2.處理service層的異常ServiceExceptionAspect .java
3.使用方式,在spring的公共配置檔案中加入如下配置:
或者 自定義一個 注冊類,ServiceExceptionAspect.java和WebExceptionAspect.java都加入@Component注解
@within(org.springframework.stereotype.Service),攔截帶有 @Service 注解的類的所有方法
@annotation(org.springframework.web.bind.annotation.RequestMapping),攔截帶有@RquestMapping的注解方法
分别編寫controller層和service層的異常測試類。這個很簡單,在方法裡簡單的抛一下異常就可以了。最後驗證一下,異常發生的時候有沒有 執行 @AfterThrowing對應的方法就好了。具體還是看我寫的demo吧,嘿嘿嘿!!!