如何處理SpringBoot全域性異常與資料校驗?居家程式設計師2019-09-11 22:40:07

這個問題其實是兩個方面,一是SpringBoot的全域性異常處理方式,二是SpringBoot的資料校驗,讓我們一一來進行。

全域性異常處理

,實際上便是需要我們對系統執行中出現的異常進行一個統一的捕獲和處理,具體的處理邏輯則根據業務來進行,可以進行日誌記錄,也可以進行前端的返回,再由前端進行資訊的提示等。

那如何來實現這樣一個全域性異常的捕獲和處理呢?

在SpringBoot中,有一個註解——

@ControllerAdvice

,該註解所修飾的bean代表了其開啟了全域性異常的捕獲,我們只需要在這個被註解修飾的類中,自定義一個方法並使用

@ExceptionHandler

註解,而且需要定義要捕獲異常的型別即可對這些捕獲的異常進行統一的處理。

在實際生產中,我們一般會為業務定義一些自定義的異常,用於捕獲在業務中的不合理的情況,如資料異常等;隨後透過@ControllerAdvice定義的類中的@ExceptionHandle方法來攔截該異常,從而實現對該異常的捕獲和處理。

舉個“慄”子!

我首先定義一個

新的異常類

,用於捕獲業務場景中的各種業務問題:

如何處理SpringBoot全域性異常與資料校驗?

在業務場景中,遇到不正確的操作,則丟擲該異常:

如何處理SpringBoot全域性異常與資料校驗?

該丟擲的異常將被我們定義的全域性異常處理器捕獲並處理:

如何處理SpringBoot全域性異常與資料校驗?

至此,便實現了SpringBoot的全域性異常處理。

再說下題主所提的

資料校驗

,通常我們操作資料的時候,不僅前端需要進行資料校驗,後端也應當進行攔截和進行相應的錯誤提示。

我們可以使用SpringBoot裡包含的

hibernate-validator

來進行。

由於spring-boot-starter-web裡已經包括了hibernate-validator,所以我們不需要額外引入jar。

舉個“慄”子!

在需要進行校驗的實體類中,我們使用對應的註解來進行,常見的註解有許多,最常見的不可不說下“非空”判斷,即

@NotBlank

註解:

如何處理SpringBoot全域性異常與資料校驗?

然後在Controller層接收資料處,透過

@Valid

註解進行標記,便會對該接收實體進行校驗:

如何處理SpringBoot全域性異常與資料校驗?

在校驗失敗之後,我們可以定義一個

全域性異常處理器

,來捕獲資料校驗的失敗,從而返回統一的返回值處理。

如何處理SpringBoot全域性異常與資料校驗?

兩者一結合,便可以優雅的實現資料校驗+全域性異常捕獲統一處理。

歡迎關注我的頭條號【

居家程式設計師

】,時刻不停地思考著有趣的標題(而不是內容哈哈)

——沒事待在家裡不出門的

居家程式設計師

。(我不想脫髮!)

如何處理SpringBoot全域性異常與資料校驗?有漁量化2018-12-29 22:17:27

用AOP吧,面向切面程式設計。