中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot如何自定義異常并捕獲異常返給前端

發布時間:2021-11-15 09:08:32 來源:億速云 閱讀:744 作者:小新 欄目:開發技術

小編給大家分享一下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,就是捕獲的異常類型,我們只需要把需要捕獲異常類型寫進來就好

springboot如何自定義異常并捕獲異常返給前端

 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

springboot如何自定義異常并捕獲異常返給前端

 springboot如何自定義異常并捕獲異常返給前端

2.捕獲系統異常

throw new SystemException("aaaa");

3.其他的try catch的異常,這個就可以捕獲了 

springboot如何自定義異常并捕獲異常返給前端

以上是“springboot如何自定義異常并捕獲異常返給前端”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

周至县| 新邵县| 长阳| 花莲市| 大庆市| 侯马市| 涞源县| 甘泉县| 石门县| 阿拉善右旗| 高要市| 鄂尔多斯市| 永济市| 临沧市| 沂南县| 大英县| 双江| 武城县| 泾川县| 沛县| 定西市| 手游| 满城县| 通化市| 绥芬河市| 武宁县| 安吉县| 根河市| 乌鲁木齐县| 肥乡县| 永靖县| 周宁县| 岢岚县| 项城市| 明水县| 宁安市| 房产| 汶川县| 体育| 无为县| 邛崃市|