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

SpringMVC項(xiàng)目異常處理機(jī)制詳解

 更新時(shí)間:2022年08月30日 09:59:03   作者:mzz124  
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡?qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開發(fā)

1、異常分類

通常分為三類:系統(tǒng)異常(SystemException),業(yè)務(wù)異常(BusinessException)和其他異常(Exception)

  • 業(yè)務(wù)異常指由于用戶的不規(guī)范操作產(chǎn)生的異常,如不合法的參數(shù)傳入
  • 系統(tǒng)異常指項(xiàng)目運(yùn)行過(guò)程中可預(yù)計(jì)但無(wú)法避免的異常,如數(shù)據(jù)庫(kù)宕機(jī)
  • 其他異常指開發(fā)者未曾預(yù)料到的異常

2、自定義項(xiàng)目業(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、自定義項(xiàng)目系統(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ù)料到會(huì)發(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)異常和其他異常需要工作人員對(duì)系統(tǒng)進(jìn)行調(diào)整,所以出現(xiàn)這兩種異常時(shí)通常要記錄進(jìn)日志,并將相關(guān)信息發(fā)送給運(yùn)維人員和開發(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ā)送消息給運(yùn)維人員,發(fā)送郵件給開發(fā)人員
        return new Result(ex.getCode(), null, ex.getMessage());
    }
    //攔截處理其他異常
    @ExceptionHandler(Exception.class)
    public Result doException(Exception ex) {
        // 記錄日志,發(fā)送消息給運(yùn)維人員,發(fā)送郵件給開發(fā)人員
        return new Result(Code.SYSTEM_UNKNOWN_ERR, null, "系統(tǒng)繁忙,請(qǐng)聯(lián)系管理員。");
    }
}

7、異常發(fā)生

以業(yè)務(wù)層為例,查找 id 小于等于 0 時(shí)認(rèn)為參數(shù)非法,可以拋出業(yè)務(wù)異常。對(duì)于系統(tǒng)異常,使用 try catch 語(yǔ)句包裹可能會(huì)出現(xiàn)異常的語(yǔ)句,捕獲異常并包裝成自定義的異常,再將其拋出

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

最后可以用 Postman 發(fā)送對(duì)應(yīng)的請(qǐng)求進(jìn)行測(cè)試

到此這篇關(guān)于SpringMVC項(xiàng)目異常處理機(jī)制詳解的文章就介紹到這了,更多相關(guān)SpringMVC異常處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis控制臺(tái)打印SQL語(yǔ)句的兩種方式實(shí)現(xiàn)

    Mybatis控制臺(tái)打印SQL語(yǔ)句的兩種方式實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis控制臺(tái)打印SQL語(yǔ)句的兩種方式實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • JAVA開發(fā)常用類庫(kù)UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實(shí)例詳解

    JAVA開發(fā)常用類庫(kù)UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實(shí)例詳

    這篇文章主要介紹了JAVA開發(fā)常用類庫(kù)UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實(shí)例詳解,需要的朋友可以參考下
    2020-02-02
  • java獲取json中的全部鍵值對(duì)實(shí)例

    java獲取json中的全部鍵值對(duì)實(shí)例

    下面小編就為大家分享一篇java獲取json中的全部鍵值對(duì)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過(guò)程解析

    Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了Java加權(quán)負(fù)載均衡策略實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • feign如何打印出http請(qǐng)求

    feign如何打印出http請(qǐng)求

    這篇文章主要介紹了feign如何打印出http請(qǐng)求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 一文帶你初識(shí)java中的String類

    一文帶你初識(shí)java中的String類

    String代表字符串,Java 程序中的所有字符串字面值(如 "abc" )都作為此類的實(shí)例實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于java中String類的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 布隆過(guò)濾器(Bloom Filter)的Java實(shí)現(xiàn)方法

    布隆過(guò)濾器(Bloom Filter)的Java實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇布隆過(guò)濾器(Bloom Filter)的Java實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Java中字符編碼格式詳解

    Java中字符編碼格式詳解

    在java應(yīng)用軟件中,會(huì)有多處涉及到字符集編碼,有些地方需要進(jìn)行正確的設(shè)置,有些地方需要進(jìn)行一定程度的處理。本文主要給大家講解java中字符的編碼格式等相關(guān)問(wèn)題
    2016-03-03
  • 利用springmvc處理模型數(shù)據(jù)

    利用springmvc處理模型數(shù)據(jù)

    這篇文章主要介紹了如何利用springmvc 處理模型數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)使用springmvc,感興趣的朋友可以了解下
    2021-03-03
  • 基于Java的guava開源庫(kù)工具類

    基于Java的guava開源庫(kù)工具類

    guava是谷歌基于java封裝好的開源庫(kù),這篇文章主要通過(guò)介紹幾個(gè)好用的guava工具類,感興趣的朋友可以參考下面文章內(nèi)容
    2021-09-09

最新評(píng)論