SpringBoot 統(tǒng)一異常處理的實(shí)現(xiàn)示例
一. 概念
其實(shí)統(tǒng)一異常是運(yùn)用了AOP(對(duì)某一類事情的集中處理)的思維,簡單概括就是在我們進(jìn)行前后端數(shù)據(jù)交互的時(shí)候,拋出的任何的異常都能夠自動(dòng)捕獲然后拋出,不用程序員在敲代碼時(shí)格外關(guān)注try catch語句。
其實(shí)統(tǒng)一異常處理非常簡單,在實(shí)現(xiàn)時(shí)要加入類注解@ControllerAdvice(這是一個(gè)表示控制通知的注解,在接下來的統(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í)候,就會(huì)被該異常處理方法所捕獲,并且返回統(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)有多個(gè)異常通知時(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java生成隨機(jī)時(shí)間的簡單隨機(jī)算法
今天小編就為大家分享一篇關(guān)于Java生成隨機(jī)時(shí)間的簡單隨機(jī)算法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-01-01
詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法
這篇文章主要介紹了詳解Java的內(nèi)置異常以及創(chuàng)建自定義異常子類的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
Java concurrency之鎖_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Java concurrency之鎖的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Java中鎖的實(shí)現(xiàn)和內(nèi)存語義淺析
這篇文章主要給大家介紹了關(guān)于Java中鎖的實(shí)現(xiàn)和內(nèi)存語義的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11

