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 {
/**
* 無異常 請求成功并有具體內(nèi)容返回
* @param object
* @return
*/
public static ReturnMessage<Object> sucess(Object object) {
ReturnMessage<Object> message = new ReturnMessage<Object>(0,"sucess",object);
return message;
}
/**
* 無異常 請求成功并無具體內(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());
}
}
}
測試
分別測試自定義異常和系統(tǒng)異常,通過 /error/custome 測試自定義異常,通過 /error/unknown 測試未知的系統(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;
}
}
測試結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題
這篇文章主要介紹了Spring?security?oauth2以redis作為tokenstore及jackson序列化失敗問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>2024-04-04
Tomcat 實(shí)現(xiàn)WebSocket詳細(xì)介紹
這篇文章主要介紹了Tomcat 如何實(shí)現(xiàn)WebSocket的相關(guān)資料,對WebSocket協(xié)議通信的過程進(jìn)行了詳細(xì)介紹,需要的朋友可以參考下2016-12-12
工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下2017-08-08
springboot IDEA啟動(dòng)兩個(gè)端口服務(wù)nginx負(fù)載過程
這篇文章主要介紹了springboot IDEA啟動(dòng)兩個(gè)端口服務(wù)nginx負(fù)載過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Spring Boot 和 Spring 到底有啥區(qū)別你知道嗎
Spring Boot框架的核心就是自動(dòng)配置,只要存在相應(yīng)的jar包,Spring就幫我們自動(dòng)配置。接下來通過本文給大家介紹Spring與Spring boot的區(qū)別介紹,非常不錯(cuò),需要的朋友參考下吧2021-08-08
SpringBoot結(jié)合Neo4j自定義cypherSql的方法
這篇文章主要介紹了SpringBoot結(jié)合Neo4j自定義cypherSql,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11

