SpringBoot 2 統(tǒng)一異常處理過程解析
統(tǒng)一異常處理相關(guān)注解介紹
@ControllerAdvice
聲明在類上用于指定該類為控制增強(qiáng)器類,如果想聲明返回的結(jié)果為 RESTFull 風(fēng)格的數(shù)據(jù),需要在聲明 @ExceptionHandler 注解的方法上同時(shí)加 上 @ResponseBody
@RestControllerAdvice
聲明在類上用于指定該類為控制增強(qiáng)器類。并聲明返回的結(jié)果為 RESTFull 風(fēng)格的數(shù)據(jù),無需在聲明@ExceptionHandler 注解的方法上加@ResponseBody
@ExceptionHandler
聲明在方法上用于指定需要統(tǒng)一攔截的異常。例如:@ExceptionHandler(value = Exception.class)
實(shí)戰(zhàn)操作
定義消息類:
定義 RESTFull 返回 JSON 數(shù)據(jù)的消息類,其中包含成員變量如下:
- code:錯(cuò)誤碼,0表示沒有異常信息。
- message:異常提示信息。
- date:無異常是返回具體內(nèi)容信息。
public class ReturnMessage<T> {
private Integer code;//錯(cuò)誤碼
private String message;//提示信息
private T date;//返回具體內(nèi)容
public ReturnMessage(Integer code, String message, T date) {
super();
this.code = code;
this.message = message;
this.date = date;
}
//省略get and set方法
}
** 消息類處理工具類:**
主要是用來處理成功或失敗消息處理,該工具類主要包含是3個(gè)方法 :
- 成功處理含實(shí)體數(shù)據(jù)
- 成功處理 沒有實(shí)體數(shù)據(jù)
- 失敗處理
具體代碼如下:
public class ReturnMessageUtil {
/**
* 無異常 請(qǐng)求成功并有具體內(nèi)容返回
* @param object
* @return
*/
public static ReturnMessage<Object> sucess(Object object) {
ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);
return message;
}
/**
* 無異常 請(qǐng)求成功并無具體內(nèi)容返回
* @return
*/
public static ReturnMessage<Object> sucess() {
ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",null);
return message;
}
/**
* 有自定義錯(cuò)誤異常信息
* @param code
* @param msg
* @return
*/
public static ReturnMessage<Object> error(Integer code,String msg) {
ReturnMessage<Object> message = new ReturnMessage<Object>(code,msg,null);
return message;
}
}
自定義異常類:
我們通過自定義系統(tǒng)異常類來完成校驗(yàn)相關(guān)的操作,自定義系統(tǒng)異常類通過繼承 RuntimeException ,然后聲明名稱為 code 的成員變量來表示不同類型異常。
主要是用于異常攔截后獲取自定義異常的 code ,并將code 設(shè)置到消息類中。
public class SbException extends RuntimeException{
private Integer code;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public SbException(Integer code,String message) {
super(message);
this.code = code;
}
}
定義統(tǒng)一異常攔截類:
通過聲明 @RestControllerAdvice 表示該類為 RESTFul 風(fēng)格的異常處理控制增強(qiáng)器類,在 handle 方法聲明 @ExceptionHandler 并在該注解中指定要攔截的異常類。具體代碼如下:
@RestControllerAdvice
public class ExceptionHandle {
private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);
@ExceptionHandler(value = Exception.class)
public ReturnMessage<Object> handle(Exception exception) {
if(exception instanceof SbException) {
SbException sbexception = (SbException)exception;
return ReturnMessageUtil.error(sbexception.getCode(), sbexception.getMessage());
}else {
logger.error("系統(tǒng)異常 {}",exception);
return ReturnMessageUtil.error(-1, "未知異常"+exception.getMessage());
}
}
}
測(cè)試
分別測(cè)試自定義異常和系統(tǒng)異常,通過 /error/custome 測(cè)試自定義異常,通過 /error/unknown 測(cè)試未知的系統(tǒng)異常。具體代碼如下:
@RestController
@RequestMapping("/error")
public class DemoException {
@GetMapping(value = "custome")
public void customException() {
SbException sbe = new SbException(100, "這個(gè)是自定義異常!");
throw sbe;
}
@GetMapping(value = "unknown")
public void unknownException() {
int i = 0;
int b = 1/i;
}
}
測(cè)試結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析
這篇文章主要介紹了SpringCloud消息總線Bus配置中心實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)講解
這篇文章主要介紹了Spring?Cloud?Gateway?服務(wù)網(wǎng)關(guān)的部署與使用詳細(xì)介紹,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Idea安裝及涉及springboot詳細(xì)配置的圖文教程
這篇文章主要介紹了Idea安裝及涉及springboot詳細(xì)配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決
這篇文章主要介紹了SpringMVC @RequestBody自動(dòng)轉(zhuǎn)json Http415錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解
這篇文章主要介紹了SpringBoot中請(qǐng)求參數(shù)綁定及使用詳解,在Web應(yīng)用程序中,請(qǐng)求參數(shù)綁定是非常重要的操作,Spring?Boot框架使得請(qǐng)求參數(shù)綁定變得非常簡(jiǎn)單,通過使用注解和預(yù)定義的類可以輕松地實(shí)現(xiàn)此操作,需要的朋友可以參考下2023-08-08
Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤)
這篇文章主要介紹了Mybatis批量插入index out of range錯(cuò)誤的解決(較偏的錯(cuò)誤),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別
這篇文章主要介紹了淺談SpringBoot項(xiàng)目打成war和jar的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

