欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

如何處理SpringBoot全局異常與數(shù)據(jù)校驗(yàn)?

黃文隆2年前15瀏覽0評論

這個問題其實(shí)是兩個方面,一是SpringBoot的全局異常處理方式,二是SpringBoot的數(shù)據(jù)校驗(yàn),讓我們一一來進(jìn)行。

全局異常處理,實(shí)際上便是需要我們對系統(tǒng)運(yùn)行中出現(xiàn)的異常進(jìn)行一個統(tǒng)一的捕獲和處理,具體的處理邏輯則根據(jù)業(yè)務(wù)來進(jìn)行,可以進(jìn)行日志記錄,也可以進(jìn)行前端的返回,再由前端進(jìn)行信息的提示等。

那如何來實(shí)現(xiàn)這樣一個全局異常的捕獲和處理呢?

在SpringBoot中,有一個注解——@ControllerAdvice,該注解所修飾的bean代表了其開啟了全局異常的捕獲,我們只需要在這個被注解修飾的類中,自定義一個方法并使用@ExceptionHandler注解,而且需要定義要捕獲異常的類型即可對這些捕獲的異常進(jìn)行統(tǒng)一的處理。

在實(shí)際生產(chǎn)中,我們一般會為業(yè)務(wù)定義一些自定義的異常,用于捕獲在業(yè)務(wù)中的不合理的情況,如數(shù)據(jù)異常等;隨后通過@ControllerAdvice定義的類中的@ExceptionHandle方法來攔截該異常,從而實(shí)現(xiàn)對該異常的捕獲和處理。

舉個“栗”子!

我首先定義一個新的異常類,用于捕獲業(yè)務(wù)場景中的各種業(yè)務(wù)問題:

在業(yè)務(wù)場景中,遇到不正確的操作,則拋出該異常:

該拋出的異常將被我們定義的全局異常處理器捕獲并處理:

至此,便實(shí)現(xiàn)了SpringBoot的全局異常處理。


再說下題主所提的數(shù)據(jù)校驗(yàn),通常我們操作數(shù)據(jù)的時候,不僅前端需要進(jìn)行數(shù)據(jù)校驗(yàn),后端也應(yīng)當(dāng)進(jìn)行攔截和進(jìn)行相應(yīng)的錯誤提示。

我們可以使用SpringBoot里包含的hibernate-validator來進(jìn)行。

由于spring-boot-starter-web里已經(jīng)包括了hibernate-validator,所以我們不需要額外引入jar。

舉個“栗”子!

在需要進(jìn)行校驗(yàn)的實(shí)體類中,我們使用對應(yīng)的注解來進(jìn)行,常見的注解有許多,最常見的不可不說下“非空”判斷,即@NotBlank注解:

然后在Controller層接收數(shù)據(jù)處,通過@Valid注解進(jìn)行標(biāo)記,便會對該接收實(shí)體進(jìn)行校驗(yàn):

在校驗(yàn)失敗之后,我們可以定義一個全局異常處理器,來捕獲數(shù)據(jù)校驗(yàn)的失敗,從而返回統(tǒng)一的返回值處理。

兩者一結(jié)合,便可以優(yōu)雅的實(shí)現(xiàn)數(shù)據(jù)校驗(yàn)+全局異常捕獲統(tǒng)一處理。

我的【居家程序員】,時刻不停地思考著有趣的標(biāo)題(而不是內(nèi)容哈哈)

——沒事待在家里不出門的居家程序員。(我不想脫發(fā)!)