如何處理SpringBoot全局異常與數據校驗?
這個問題其實是兩個方面,一是SpringBoot的全局異常處理方式,二是SpringBoot的數據校驗,讓我們一一來進行。
全局異常處理,實際上便是需要我們對系統運行中出現的異常進行一個統一的捕獲和處理,具體的處理邏輯則根據業務來進行,可以進行日志記錄,也可以進行前端的返回,再由前端進行信息的提示等。
那如何來實現這樣一個全局異常的捕獲和處理呢?
在SpringBoot中,有一個注解——@ControllerAdvice,該注解所修飾的bean代表了其開啟了全局異常的捕獲,我們只需要在這個被注解修飾的類中,自定義一個方法并使用@ExceptionHandler注解,而且需要定義要捕獲異常的類型即可對這些捕獲的異常進行統一的處理。
在實際生產中,我們一般會為業務定義一些自定義的異常,用于捕獲在業務中的不合理的情況,如數據異常等;隨后通過@ControllerAdvice定義的類中的@ExceptionHandle方法來攔截該異常,從而實現對該異常的捕獲和處理。
舉個“栗”子!
我首先定義一個新的異常類,用于捕獲業務場景中的各種業務問題:
在業務場景中,遇到不正確的操作,則拋出該異常:
該拋出的異常將被我們定義的全局異常處理器捕獲并處理:
至此,便實現了SpringBoot的全局異常處理。
再說下題主所提的數據校驗,通常我們操作數據的時候,不僅前端需要進行數據校驗,后端也應當進行攔截和進行相應的錯誤提示。
我們可以使用SpringBoot里包含的hibernate-validator來進行。
由于spring-boot-starter-web里已經包括了hibernate-validator,所以我們不需要額外引入jar。
舉個“栗”子!
在需要進行校驗的實體類中,我們使用對應的注解來進行,常見的注解有許多,最常見的不可不說下“非空”判斷,即@NotBlank注解:
然后在Controller層接收數據處,通過@Valid注解進行標記,便會對該接收實體進行校驗:
在校驗失敗之后,我們可以定義一個全局異常處理器,來捕獲數據校驗的失敗,從而返回統一的返回值處理。
兩者一結合,便可以優雅的實現數據校驗+全局異常捕獲統一處理。
歡迎關注我的頭條號【居家程序員】,時刻不停地思考著有趣的標題(而不是內容哈哈)
——沒事待在家里不出門的 居家程序員。(我不想脫發!)