SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例
一. 概念
其實(shí)統(tǒng)一異常是運(yùn)用了AOP(對某一類事情的集中處理)的思維,簡單概括就是在我們進(jìn)行前后端數(shù)據(jù)交互的時(shí)候,拋出的任何的異常都能夠自動捕獲然后拋出,不用程序員在敲代碼時(shí)格外關(guān)注try catch語句。
其實(shí)統(tǒng)一異常處理非常簡單,在實(shí)現(xiàn)時(shí)要加入類注解@ControllerAdvice(這是一個表示控制通知的注解,在接下來的統(tǒng)一異常處理也要運(yùn)用到),并且有一點(diǎn)與統(tǒng)一數(shù)據(jù)返回不同的是,統(tǒng)一異常處理需要加上類注解@ResponseBody來確認(rèn)返回的數(shù)據(jù)類型,然后在類中要進(jìn)行捕獲異常的方法上加上注解@ExceptionHandle即可。
二. 全局異常處理
處理全局異常代碼如下:
import com.example.demo.model.Result; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice @ResponseBody public class ErrorAdvice { /** * 全局異常處理 */ @ExceptionHandler public Object handler(Exception e) { return Result.fail(e.getMessage()); } }
這樣程序拋出異常的時(shí)候,就會被該異常處理方法所捕獲,并且返回統(tǒng)一異常處理的結(jié)果(JSON格式)!
三. 處理特定異常
處理特定異常代碼如下:
import com.example.demo.model.Result; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ResponseBody @ControllerAdvice public class ErrorAdvice { @ExceptionHandler public Object handler(Exception e) { return Result.fail(e.getMessage()); } @ExceptionHandler public Object handler(NullPointerException e) { return Result.fail("發(fā)?NullPointerException:"+e.getMessage()); } @ExceptionHandler public Object handler(ArithmeticException e) { return Result.fail("發(fā)?ArithmeticException:"+e.getMessage()); } }
當(dāng)有多個異常通知時(shí),匹配順序?yàn)楫?dāng)前類及其?類向上依次匹配
進(jìn)行統(tǒng)一異常處理的目的就是在異常發(fā)生時(shí),盡可能地減少破壞,妥善處理,而不去影響其他部分程序的運(yùn)行
到此這篇關(guān)于SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot 統(tǒng)一異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring security獲取用戶信息為null或者串值的解決
這篇文章主要介紹了spring security獲取用戶信息為null或者串值的解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03基于spring@aspect注解的aop實(shí)現(xiàn)過程代碼實(shí)例
這篇文章主要介紹了基于spring@aspect注解的aop實(shí)現(xiàn)過程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Spring?Boot?集成并開發(fā)?Sa-token示例詳解
Sa-token是一款高可用的權(quán)限認(rèn)證框架,他帶我們用最簡化的配置完成用?spring?security?需要進(jìn)行大量配置的才能完成的工作,這篇文章主要介紹了Spring?Boot?集成并開發(fā)?Sa-token,需要的朋友可以參考下2023-06-06Spring Boot @Conditional注解用法示例介紹
這篇文章主要給大家介紹了關(guān)于Spring Boot @Conditional注解用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Springboot+hibernate實(shí)現(xiàn)簡單的增刪改查示例
今天小編就為大家分享一篇Springboot+hibernate實(shí)現(xiàn)簡單的增刪改查示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08java.lang.AbstractMethodError: org.apache.xerces.dom.Documen
這篇文章主要介紹了java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion問題解決方法,導(dǎo)致本文問題的原因是缺少一個xerces.jar jar包,需要的朋友可以參考下2015-03-03Java實(shí)現(xiàn)統(tǒng)計(jì)在線人數(shù)功能的方法詳解
很多人在筆試或者面試中問到:現(xiàn)在要你實(shí)現(xiàn)一個統(tǒng)計(jì)在線人數(shù)的功能,你該怎么設(shè)計(jì)?不知道的朋友,這篇文章就來告訴你具體實(shí)現(xiàn)方法2022-08-08