欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot 自定義異常并捕獲異常返給前端的實(shí)現(xiàn)代碼

 更新時(shí)間:2021年11月13日 14:40:54   作者:---清心寡欲---  
在開發(fā)中,如果用try catch的方式,每個(gè)方法都需要單獨(dú)實(shí)現(xiàn),為了方便分類異常,返回給前端,采用了@ControllerAdvice注解和繼承了RuntimeException的方式來(lái)實(shí)現(xiàn),具體實(shí)現(xiàn)內(nèi)容跟隨小編一起看看吧

背景

在開發(fā)中,如果用try catch的方式,每個(gè)方法都需要單獨(dú)實(shí)現(xiàn),為了方便分類異常,返回給前端,采用了@ControllerAdvice注解和繼承了RuntimeException的方式來(lái)實(shí)現(xiàn)。

實(shí)現(xiàn)內(nèi)容

捕獲了三類異常
1.業(yè)務(wù)異常

          BusinessException

2.系統(tǒng)異常 

        SystemException

3.其他異常

        利用@ExceptionHandler(RuntimeException.class)去捕獲

ExceptionAdvice類捕獲以上三類異常,并返回自定義類型格式數(shù)據(jù)

實(shí)現(xiàn)代碼

業(yè)務(wù)異常BusinessException類實(shí)現(xiàn)方式,繼承RuntimeException

public class BusinessException extends  RuntimeException {
	/**
	 * 錯(cuò)誤編碼
	 */
	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();
	}
}

系統(tǒng)異常SystemException類實(shí)現(xiàn)方式,繼承RuntimeException,同業(yè)務(wù)異常類的實(shí)現(xiàn)方式一樣

public class SystemException extends  RuntimeException {
	/**
	 * 錯(cuò)誤編碼
	 */
	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類,采用增強(qiáng)Controller注解 @ControllerAdvice的方式來(lái)實(shí)現(xiàn)

1.方法名稱和返回類型都可以根據(jù)自己需要定義;

2.采用注解@ExceptionHandler,就是捕獲的異常類型,我們只需要把需要捕獲異常類型寫進(jìn)來(lái)就好

 ExceptionAdvice 具體代碼實(shí)現(xiàn)如下:

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("系統(tǒng)異常信息:", 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("業(yè)務(wù)異常消息:", e.getMessage());
        ajaxJson.setRet(-1);
        ajaxJson.setMsg(e.getMessage());
        return ajaxJson;
    }
 
}

測(cè)試代碼

1.我們捕獲一個(gè)業(yè)務(wù)異常BusinessException,輸出aaa

 

2.捕獲系統(tǒng)異常

throw new SystemException("aaaa");

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

到此這篇關(guān)于springboot 自定義異常并捕獲異常返給前端的文章就介紹到這了,更多相關(guān)springboot 自定義異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論