在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
- @ControllerAdvice註解定義該類為SpringMVC增強類,可將該類當作一個Controller處理。
- @ExceptionHandler(BusinessException.class)註解定義該方法捕獲全局的BusinessException異常。
- @ResponseBody指定響應數據格式為JSON。
- ImmutableMap集合線程安全,一旦構建後無法更改,Key為異常類的class對象,value為錯誤信息枚舉。
編寫ExceptionCatch後service層和controller都無需再進行異常捕獲處理。
Service代碼
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
- @ControllerAdvice註解定義該類為SpringMVC增強類,可將該類當作一個Controller處理。
- @ExceptionHandler(BusinessException.class)註解定義該方法捕獲全局的BusinessException異常。
- @ResponseBody指定響應數據格式為JSON。
- ImmutableMap集合線程安全,一旦構建後無法更改,Key為異常類的class對象,value為錯誤信息枚舉。
編寫ExceptionCatch後service層和controller都無需再進行異常捕獲處理。
Service代碼
Controller代碼
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
- @ControllerAdvice註解定義該類為SpringMVC增強類,可將該類當作一個Controller處理。
- @ExceptionHandler(BusinessException.class)註解定義該方法捕獲全局的BusinessException異常。
- @ResponseBody指定響應數據格式為JSON。
- ImmutableMap集合線程安全,一旦構建後無法更改,Key為異常類的class對象,value為錯誤信息枚舉。
編寫ExceptionCatch後service層和controller都無需再進行異常捕獲處理。
Service代碼
Controller代碼
響應數據
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
- @ControllerAdvice註解定義該類為SpringMVC增強類,可將該類當作一個Controller處理。
- @ExceptionHandler(BusinessException.class)註解定義該方法捕獲全局的BusinessException異常。
- @ResponseBody指定響應數據格式為JSON。
- ImmutableMap集合線程安全,一旦構建後無法更改,Key為異常類的class對象,value為錯誤信息枚舉。
編寫ExceptionCatch後service層和controller都無需再進行異常捕獲處理。
Service代碼
Controller代碼
響應數據
在SpringMVC框架項目開發中,異常的處理對於每個程序員來說都是必不可少的。一般我們會選擇在service層或controller層對異常進行捕獲處理,提供友好的信息展示給用戶。但是一個項目中,需要捕獲異常的地方非常多,如果每一個地方都進行try catch,那代碼將會變得非常冗餘且不好維護。下面我們通過代碼分析一下這個種異常處理的弊端。
通常做法
ErrorInfo定義
Service部分代碼
如上例子是一個service層從dao獲取用戶信息的代碼,這樣處理異常似乎沒有什麼問題,但細看會發現,所有可能出現的異常,都使用了“999999”錯誤代碼定義,這對於前端來說是非常不友好的,由此我們可以看出,這種處理方式至少存在兩個弊端:
- 無法準確定義錯誤代碼。
- 異常處理代碼冗餘。
自定義異常
第一個問題,可以通過自定義異常和自定義錯誤代碼解決,在可預知錯誤的地方,先進行校驗,校驗不通過則拋出自定義異常,校驗通過再處理後面的業務邏輯。
自定義異常類
定義一個BusinessException作為全局的自定義異常。繼承RuntimeException(運行時異常)對代碼無可侵入性,不需要方法中強制捕獲或者拋出。
添加自定義錯誤信息
Service修改後代碼
自定義異常主要用於處理一些可預知的異常,並準確定義錯誤碼。
全局異常統一處理
實現思路:
- 對異常進行歸類。
- 使用SpringMVC控制器增強,捕獲全局異常。
- 捕獲BusinessException業務異常,取出錯誤碼和信息構造響應。
- 使用一個線程安全、並且不可更改的map存儲不可預知異常自定義的錯誤信息。
- 捕獲BusinessException以外的異常(Exception),判斷map是否定義了該異常錯誤信息,若有定義取出錯誤信息構造響應,否則返回默認錯誤。
異常歸類:
需要解決try catch代碼冗餘的問題,首先我們需要對異常進行歸類,可分為一下三類:
- 可預知異常。(自定義異常BusinessException)
- 不可預知異常,但需要明確定義錯誤碼。(例如jdbc拋出的數據庫連接異常,需要定義一個錯誤碼返回前端)
- 不可預知異常,不需特殊處理錯誤碼。
SpringMVC控制器增強
使用SpringMVC控制器增強,捕獲全局異常,對異常分類處理,構造響應信息。
代碼實現
- @ControllerAdvice註解定義該類為SpringMVC增強類,可將該類當作一個Controller處理。
- @ExceptionHandler(BusinessException.class)註解定義該方法捕獲全局的BusinessException異常。
- @ResponseBody指定響應數據格式為JSON。
- ImmutableMap集合線程安全,一旦構建後無法更改,Key為異常類的class對象,value為錯誤信息枚舉。
編寫ExceptionCatch後service層和controller都無需再進行異常捕獲處理。
Service代碼
Controller代碼
響應數據
總結
異常拋出的順序為Dao—Service—Controller—ExceptionCatch,SpringMVC增強的即是在Controller層進行攔截,實現全局異常統捕獲,異常在ExceptionCatch統一處理後,就無需再代碼中單獨對每個服務進行try catch,此種實現方式代碼不僅重用性高,而易於擴展。
多寫多敲代碼,好的代碼與紮實的基礎知識一定是實踐出來的
推薦:Java高級開發,Java架構師/大型互聯網架構進階直播
地址:http://t.cn/AiKfJ6Zx
(複製鏈接到瀏覽器即可)
最後,每一位讀到這裡的網友,感謝你們能耐心地看完。希望此文能幫到大家的同時,也聽聽大家的觀點。歡迎留言討論、關注、收藏、轉發、分享你的高見!持續更新!