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

溫馨提示×

溫馨提示×

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

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

SpringMVC項目異常處理機制實例代碼分析

發布時間:2022-08-30 11:24:44 來源:億速云 閱讀:164 作者:iii 欄目:開發技術

這篇文章主要介紹了SpringMVC項目異常處理機制實例代碼分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇SpringMVC項目異常處理機制實例代碼分析文章都會有所收獲,下面我們一起來看看吧。

1、異常分類

通常分為三類:系統異常(SystemException),業務異常(BusinessException)和其他異常(Exception)

  • 業務異常指由于用戶的不規范操作產生的異常,如不合法的參數傳入

  • 系統異常指項目運行過程中可預計但無法避免的異常,如數據庫宕機

  • 其他異常指開發者未曾預料到的異常

2、自定義項目業務異常

public class BusinessException extends RuntimeException {
    private Integer code;
    public BusinessException(Integer code, String message) {
        super(message);
        this.code = code;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
}

3、自定義項目系統異常

public class SystemException extends RuntimeException {
    private Integer code;
    public SystemException(Integer code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
}

4、其他異常

其他異常是未預料到會發生的異常,除了上面的兩種異常外的所有異常都可以當作其他異常,由于所有的異常都繼承自 Exception 類,所以就把 Exception 作為其他異常

5、異常代碼

提高代碼可讀性,便于開發,自行協商設置即可

public class Code {
    public static final Integer SYSTEM_ERR = 50001;
    public static final Integer SYSTEM_TIMEOUT_ERR = 50002;
    public static final Integer SYSTEM_UNKNOWN_ERR = 59999;
    public static final Integer BUSINESS_ERR = 60001;
}

6、異常處理器

由于系統異常和其他異常需要工作人員對系統進行調整,所以出現這兩種異常時通常要記錄進日志,并將相關信息發送給運維人員和開發人員,而業務異常則不需要

@RestControllerAdvice
public class ProjectExceptionAdvice {
    // 攔截處理業務異常
    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex) {
        return new Result(ex.getCode(), null, ex.getMessage());
    }
    // 攔截處理系統異常
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex) {
        // 記錄日志,發送消息給運維人員,發送郵件給開發人員
        return new Result(ex.getCode(), null, ex.getMessage());
    }
    //攔截處理其他異常
    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex) {
        // 記錄日志,發送消息給運維人員,發送郵件給開發人員
        return new Result(Code.SYSTEM_UNKNOWN_ERR, null, "系統繁忙,請聯系管理員。");
    }
}

7、異常發生

以業務層為例,查找 id 小于等于 0 時認為參數非法,可以拋出業務異常。對于系統異常,使用 try catch 語句包裹可能會出現異常的語句,捕獲異常并包裝成自定義的異常,再將其拋出

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    @Override
    public Book getById(Integer id) {
        // id 小于等于零時拋出業務異常
        if (id <= 0) {
            throw new BusinessException(Code.BUSINESS_ERR, "參數不合法,請檢查傳入參數!");
        }
        // 將可能出現的異常進行包裝,裝換成自定義異常
        try {
            int x = 1 / 0;  // 加入此行出現異常
            return bookDao.getById(id); // 模擬數據庫訪問出錯
        } catch (Exception e) {
            throw new SystemException(Code.SYSTEM_TIMEOUT_ERR, "數據庫訪問異常,請稍后重試!", e);
        }
    }
}

最后可以用 Postman 發送對應的請求進行測試

關于“SpringMVC項目異常處理機制實例代碼分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“SpringMVC項目異常處理機制實例代碼分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

商水县| 云浮市| 汽车| 平利县| 兴仁县| 榆社县| 肃南| 海门市| 玉山县| 台东县| 兴仁县| 青岛市| 兰州市| 大渡口区| 黄浦区| 伊通| 长乐市| 金昌市| 砀山县| 平果县| 宝坻区| 滕州市| 双峰县| 桐梓县| 策勒县| 黎城县| 安庆市| 泰顺县| 泸州市| 桂林市| 徐闻县| 梁山县| 诏安县| 阿克| 博白县| 瓮安县| 新化县| 双鸭山市| 济阳县| 文水县| 绿春县|