您好,登錄后才能下訂單哦!
小編給大家分享一下springboot如何自定義異常并捕獲異常返給前端,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在開發中,如果用try catch的方式,每個方法都需要單獨實現,為了方便分類異常,返回給前端,采用了@ControllerAdvice注解和繼承了RuntimeException的方式來實現。
捕獲了三類異常
1.業務異常
BusinessException
2.系統異常
SystemException
3.其他異常
利用@ExceptionHandler(RuntimeException.class)去捕獲
ExceptionAdvice類捕獲以上三類異常,并返回自定義類型格式數據
業務異常BusinessException類實現方式,繼承RuntimeException
public class BusinessException extends RuntimeException { /** * 錯誤編碼 */ private String code; public BusinessException() { super(); } public BusinessException(String message) { super(message); } public BusinessException(String code, String message) { super(message); this.code = code; } public BusinessException(Throwable cause) { super(cause); } public BusinessException(String message, Throwable cause) { super(message, cause); } public BusinessException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Override public String getMessage() { return super.getMessage(); } @Override public String toString() { return this.code + ":" + this.getMessage(); } }
系統異常SystemException類實現方式,繼承RuntimeException,同業務異常類的實現方式一樣
public class SystemException extends RuntimeException { /** * 錯誤編碼 */ private String code; public SystemException() { super(); } public SystemException(String message) { super(message); } public SystemException(String code, String message) { super(message); this.code = code; } public SystemException(Throwable cause) { super(cause); } public SystemException(String message, Throwable cause) { super(message, cause); } public SystemException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); } public String getCode() { return code; } public void setCode(String code) { this.code = code; } @Override public String getMessage() { return super.getMessage(); } @Override public String toString() { return this.code + ":" + this.getMessage(); } }
ExceptionAdvice類,采用增強Controller注解 @ControllerAdvice的方式來實現
1.方法名稱和返回類型都可以根據自己需要定義;
2.采用注解@ExceptionHandler,就是捕獲的異常類型,我們只需要把需要捕獲異常類型寫進來就好
ExceptionAdvice 具體代碼實現如下:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; @ControllerAdvice public class ExceptionAdvice { public static Logger logger = LoggerFactory.getLogger(ExceptionAdvice.class); @ResponseBody @ExceptionHandler(SystemException.class) public Result handleException(Exception e) { logger.error("系統異常信息:", e); Result result = new Result(); if (e instanceof BusinessException) { e = (BusinessException) e; result.setCode(((BusinessException) e).getCode()); } result.setFailed(e.getMessage()); return result; } @ExceptionHandler(RuntimeException.class) @ResponseBody public Result handleException(RuntimeException e) { logger.error("異常信息:", e.getMessage()); Result result = new Result(); result.setStatus(500); result.setMessage(e.getMessage()); return result; } @ExceptionHandler(BusinessException.class) @ResponseBody public AjaxJson doBusinessException(Exception e) { AjaxJson ajaxJson = new AjaxJson(); logger.error("業務異常消息:", e.getMessage()); ajaxJson.setRet(-1); ajaxJson.setMsg(e.getMessage()); return ajaxJson; } }
1.我們捕獲一個業務異常BusinessException,輸出aaa
2.捕獲系統異常
throw new SystemException("aaaa");
3.其他的try catch的異常,這個就可以捕獲了
以上是“springboot如何自定義異常并捕獲異常返給前端”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。