SpringMVC項目異常處理機(jī)制詳解
1、異常分類
通常分為三類:系統(tǒng)異常(SystemException),業(yè)務(wù)異常(BusinessException)和其他異常(Exception)
- 業(yè)務(wù)異常指由于用戶的不規(guī)范操作產(chǎn)生的異常,如不合法的參數(shù)傳入
- 系統(tǒng)異常指項目運行過程中可預(yù)計但無法避免的異常,如數(shù)據(jù)庫宕機(jī)
- 其他異常指開發(fā)者未曾預(yù)料到的異常
2、自定義項目業(yè)務(wù)異常
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、自定義項目系統(tǒng)異常
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、其他異常
其他異常是未預(yù)料到會發(fā)生的異常,除了上面的兩種異常外的所有異常都可以當(dāng)作其他異常,由于所有的異常都繼承自 Exception 類,所以就把 Exception 作為其他異常
5、異常代碼
提高代碼可讀性,便于開發(fā),自行協(xié)商設(shè)置即可
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、異常處理器
由于系統(tǒng)異常和其他異常需要工作人員對系統(tǒng)進(jìn)行調(diào)整,所以出現(xiàn)這兩種異常時通常要記錄進(jìn)日志,并將相關(guān)信息發(fā)送給運維人員和開發(fā)人員,而業(yè)務(wù)異常則不需要
@RestControllerAdvice
public class ProjectExceptionAdvice {
// 攔截處理業(yè)務(wù)異常
@ExceptionHandler(BusinessException.class)
public Result doBusinessException(BusinessException ex) {
return new Result(ex.getCode(), null, ex.getMessage());
}
// 攔截處理系統(tǒng)異常
@ExceptionHandler(SystemException.class)
public Result doSystemException(SystemException ex) {
// 記錄日志,發(fā)送消息給運維人員,發(fā)送郵件給開發(fā)人員
return new Result(ex.getCode(), null, ex.getMessage());
}
//攔截處理其他異常
@ExceptionHandler(Exception.class)
public Result doException(Exception ex) {
// 記錄日志,發(fā)送消息給運維人員,發(fā)送郵件給開發(fā)人員
return new Result(Code.SYSTEM_UNKNOWN_ERR, null, "系統(tǒng)繁忙,請聯(lián)系管理員。");
}
}7、異常發(fā)生
以業(yè)務(wù)層為例,查找 id 小于等于 0 時認(rèn)為參數(shù)非法,可以拋出業(yè)務(wù)異常。對于系統(tǒng)異常,使用 try catch 語句包裹可能會出現(xiàn)異常的語句,捕獲異常并包裝成自定義的異常,再將其拋出
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public Book getById(Integer id) {
// id 小于等于零時拋出業(yè)務(wù)異常
if (id <= 0) {
throw new BusinessException(Code.BUSINESS_ERR, "參數(shù)不合法,請檢查傳入?yún)?shù)!");
}
// 將可能出現(xiàn)的異常進(jìn)行包裝,裝換成自定義異常
try {
int x = 1 / 0; // 加入此行出現(xiàn)異常
return bookDao.getById(id); // 模擬數(shù)據(jù)庫訪問出錯
} catch (Exception e) {
throw new SystemException(Code.SYSTEM_TIMEOUT_ERR, "數(shù)據(jù)庫訪問異常,請稍后重試!", e);
}
}
}最后可以用 Postman 發(fā)送對應(yīng)的請求進(jìn)行測試
到此這篇關(guān)于SpringMVC項目異常處理機(jī)制詳解的文章就介紹到這了,更多相關(guān)SpringMVC異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
idea配置tomcat,idea配置web下lib的包詳解
這篇文章主要介紹了idea配置tomcat,idea配置web下lib的包,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
SpringBoot項目的logback日志配置(包括打印mybatis的sql語句)
這篇文章主要介紹了SpringBoot項目的logback日志配置(包括打印mybatis的sql語句),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
MyBatis?Generator?ORM層面的代碼自動生成器(推薦)
Mybatis?Generator是一個專門為?MyBatis和?ibatis框架使用者提供的代碼生成器,也可以快速的根據(jù)數(shù)據(jù)表生成對應(yīng)的pojo類、Mapper接口、Mapper文件,甚至生成QBC風(fēng)格的查詢對象,這篇文章主要介紹了MyBatis?Generator?ORM層面的代碼自動生成器,需要的朋友可以參考下2023-01-01

