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

SpringMVC整合SSM實(shí)現(xiàn)異常處理器詳解

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

異常處理器

程序開(kāi)發(fā)過(guò)程中不可避免的會(huì)遇到異?,F(xiàn)象

出現(xiàn)異?,F(xiàn)象的常見(jiàn)位置與常見(jiàn)誘因如下:

  • 框架內(nèi)部拋出的異常:因使用不合規(guī)導(dǎo)致
  • 數(shù)據(jù)層拋出的異常:因外部服務(wù)器故障導(dǎo)致(例如:服務(wù)器訪問(wèn)超時(shí))
  • 業(yè)務(wù)層拋出的異常:因業(yè)務(wù)邏輯書(shū)寫(xiě)錯(cuò)誤導(dǎo)致(例如:遍歷業(yè)務(wù)書(shū)寫(xiě)操作,導(dǎo)致索引異常等)
  • 表現(xiàn)層拋出的異常:因數(shù)據(jù)收集、校驗(yàn)等規(guī)則導(dǎo)致(例如:不匹配的數(shù)據(jù)類(lèi)型間導(dǎo)致異常)
  • 工具類(lèi)拋出的異常:因工具類(lèi)書(shū)寫(xiě)不嚴(yán)謹(jǐn)不夠健壯導(dǎo)致(例如:必要釋放的連接長(zhǎng)期未釋放等)

所有的異常均拋出到表現(xiàn)層進(jìn)行處理

表現(xiàn)層處理異常,每個(gè)方法中單獨(dú)書(shū)寫(xiě),代碼書(shū)寫(xiě)量巨大且意義不強(qiáng),使用AOP思想統(tǒng)一處理

編寫(xiě)異常處理器、集中的、統(tǒng)一的處理項(xiàng)目中出現(xiàn)的異常

@RestControllerAdvice  //用于標(biāo)識(shí)當(dāng)前類(lèi)為REST風(fēng)格對(duì)應(yīng)的異常處理器
public class ProjectExceptionAdvice {
    //統(tǒng)一處理所有的Exception異常
    @ExceptionHandler(Exception.class)
    public Result doOtherException(Exception ex){
        return new Result(500,null,"系統(tǒng)異常");
    }
}

使用異常處理器之后的效果

@RestControllerAdvice注解介紹

  • 名稱(chēng):@RestControllerAdvice
  • 類(lèi)型:==類(lèi)注解==
  • 位置:Rest風(fēng)格開(kāi)發(fā)的控制器增強(qiáng)類(lèi)定義上方
  • 作用:為Rest風(fēng)格開(kāi)發(fā)的控制器類(lèi)做增強(qiáng)
  • 說(shuō)明:此注解自帶@ResponseBody注解與@Component注解,具備對(duì)應(yīng)的功能

@ExceptionHandler注解介紹

  • 名稱(chēng):@ExceptionHandler
  • 類(lèi)型:==方法注解==
  • 位置:專(zhuān)用于異常處理的控制器方法上方
  • 作用:設(shè)置指定異常的處理方案,功能等同于控制器方法,出現(xiàn)異常后終止原始控制器執(zhí)行,并轉(zhuǎn)入當(dāng)前方法執(zhí)行
  • 說(shuō)明:此類(lèi)方法可以根據(jù)處理的異常不同,制作多個(gè)方法分別處理對(duì)應(yīng)的異常

項(xiàng)目異常處理方案

項(xiàng)目異常分類(lèi)

業(yè)務(wù)異常(BusinessException)

  • 規(guī)范的用戶(hù)行為產(chǎn)生的異常
  • 不規(guī)范的用戶(hù)行為操作產(chǎn)生的異常

系統(tǒng)異常(SystemException)

  • 項(xiàng)目運(yùn)行過(guò)程中可預(yù)計(jì)且無(wú)法避免的異常

其他異常(Exception)

  • 編程人員未預(yù)期到的異常

項(xiàng)目異常處理方案

  • 業(yè)務(wù)異常(BusinessException)
  • 發(fā)送對(duì)應(yīng)消息傳遞給用戶(hù),提醒規(guī)范操作

系統(tǒng)異常(SystemException)

  • 發(fā)送固定消息傳遞給用戶(hù),安撫用戶(hù)
  • 發(fā)送特定消息給運(yùn)維人員,提醒維護(hù)
  • 記錄日志

其他異常(Exception)

  • 發(fā)送固定消息傳遞給用戶(hù),安撫用戶(hù)
  • 發(fā)送特定消息給編程人員,提醒維護(hù)(納入預(yù)期范圍內(nèi))
  • 記錄日志

項(xiàng)目異常處理代碼實(shí)現(xiàn)

根據(jù)異常分類(lèi)自定義異常類(lèi)

自定義項(xiàng)目系統(tǒng)級(jí)異常

//自定義異常處理器,用于封裝異常信息,對(duì)異常進(jìn)行分類(lèi)
public class SystemException extends RuntimeException{
    private Integer code;
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public SystemException(Integer code, String message) {
        super(message);
        this.code = code;
    }
    public SystemException(Integer code, String message, Throwable cause) {
        super(message, cause);
        this.code = code;
    }
}

自定義項(xiàng)目業(yè)務(wù)級(jí)異常

//自定義異常處理器,用于封裝異常信息,對(duì)異常進(jìn)行分類(lèi)
public class BusinessException extends RuntimeException{
    private Integer code;
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public BusinessException(Integer code, String message) {
        super(message);
        this.code = code;
    }
    public BusinessException(Integer code,String message,Throwable cause) {
        super(message, cause);
        this.code = code;
    }
}

自定義異常編碼(持續(xù)補(bǔ)充)

public class Code {
    //狀態(tài)碼
    public static final Integer SAVE_OK = 20011;
    public static final Integer DELETE_OK = 20021;
    public static final Integer UPDATE_OK = 20031;
    public static final Integer GET_OK = 20041;
    public static final Integer SAVE_ERR = 20010;
    public static final Integer DELETE_ERR = 20020;
    public static final Integer UPDATE_ERR = 20030;
    public static final Integer GET_ERR = 20040;
    public static final Integer SYSTEM_ERR = 50001;
    public static final Integer SYSTEM_TIMEOUT_ERR = 50002;
    public static final Integer SYSTEM_UNKNOW_ERR = 59999;
    public static final Integer BUSINESS_ERR = 60002;
}

觸發(fā)自定義異常

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    //在getById演示觸發(fā)異常,其他方法省略沒(méi)有寫(xiě)進(jìn)來(lái)
    public Book getById(Integer id) {
        //模擬業(yè)務(wù)異常,包裝成自定義異常
        if(id <0){
            throw new BusinessException(Code.BUSINESS_ERR,"項(xiàng)目業(yè)務(wù)級(jí)異常!");
        }
    }
}

??在異常通知類(lèi)中攔截并處理異常

@RestControllerAdvice //用于標(biāo)識(shí)當(dāng)前類(lèi)為REST風(fēng)格對(duì)應(yīng)的異常處理器
public class ProjectExceptionAdvice {
    //@ExceptionHandler用于設(shè)置當(dāng)前處理器類(lèi)對(duì)應(yīng)的異常類(lèi)型
    @ExceptionHandler(SystemException.class)
    public Result doSystemException(SystemException ex){
        //記錄日志
        //發(fā)送消息給運(yùn)維
        //發(fā)送郵件給開(kāi)發(fā)人員,ex對(duì)象發(fā)送給開(kāi)發(fā)人員
        return new Result(ex.getCode(),null,ex.getMessage());
    }
    @ExceptionHandler(BusinessException.class)
    public Result doBusinessException(BusinessException ex){
        return new Result(ex.getCode(),null,ex.getMessage());
    }
    //除了自定義的異常處理器,保留對(duì)Exception類(lèi)型的異常處理,用于處理非預(yù)期的異常
    @ExceptionHandler(Exception.class)
    public Result doOtherException(Exception ex){
        //記錄日志
        //發(fā)送消息給運(yùn)維
        //發(fā)送郵件給開(kāi)發(fā)人員,ex對(duì)象發(fā)送給開(kāi)發(fā)人員
        return new Result(Code.SYSTEM_UNKNOW_ERR,null,"系統(tǒng)繁忙,請(qǐng)稍后再試!");
    }
}

測(cè)試:在postman中發(fā)送請(qǐng)求訪問(wèn)getById方法,傳遞參數(shù)-1,得到以下結(jié)果:

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

相關(guān)文章

  • 解決IDEA中不能正常輸入光標(biāo)變粗的問(wèn)題

    解決IDEA中不能正常輸入光標(biāo)變粗的問(wèn)題

    這篇文章主要介紹了在IDEA中不能正常輸入光標(biāo)變粗的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-09-09
  • Spring項(xiàng)目運(yùn)行依賴(lài)spring-contex解析

    Spring項(xiàng)目運(yùn)行依賴(lài)spring-contex解析

    這篇文章主要介紹了Spring項(xiàng)目運(yùn)行依賴(lài)spring-contex解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java Springboot如何基于圖片生成下載鏈接

    Java Springboot如何基于圖片生成下載鏈接

    這篇文章主要介紹了Java Springboot如何基于圖片生成下載鏈接,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 10張圖總結(jié)出并發(fā)編程最佳學(xué)習(xí)路線

    10張圖總結(jié)出并發(fā)編程最佳學(xué)習(xí)路線

    這篇文章主要介紹了并發(fā)編程的最佳學(xué)習(xí)路線,文中通過(guò)圖片介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java抓包后對(duì)pcap文件解析示例

    java抓包后對(duì)pcap文件解析示例

    這篇文章主要介紹了java抓包后對(duì)pcap文件解析示例,需要的朋友可以參考下
    2014-03-03
  • Spring?Data?Jpa?復(fù)雜查詢(xún)方式總結(jié)(多表關(guān)聯(lián)及自定義分頁(yè))

    Spring?Data?Jpa?復(fù)雜查詢(xún)方式總結(jié)(多表關(guān)聯(lián)及自定義分頁(yè))

    這篇文章主要介紹了Spring?Data?Jpa?復(fù)雜查詢(xún)方式總結(jié)(多表關(guān)聯(lián)及自定義分頁(yè)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法

    Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法

    這篇文章主要介紹了Java?Collections.sort()實(shí)現(xiàn)List排序的默認(rèn)方法和自定義方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2017-06-06
  • Spring Batch 如何自定義ItemReader

    Spring Batch 如何自定義ItemReader

    這篇文章主要介紹了Spring Batch 如何自定義ItemReader的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java后綴數(shù)組之求sa數(shù)組的實(shí)例代碼

    Java后綴數(shù)組之求sa數(shù)組的實(shí)例代碼

    后綴數(shù)組就是一個(gè)字符串所有后綴大小排序后的一個(gè)集合,然后我們根據(jù)后綴數(shù)組的一些性質(zhì)就可以實(shí)現(xiàn)各種需求。這篇文章主要介紹了Java后綴數(shù)組-求sa數(shù)組,需要的朋友可以參考下
    2018-04-04
  • 基于MyBatis XML配置方法(全面了解)

    基于MyBatis XML配置方法(全面了解)

    下面小編就為大家?guī)?lái)一篇基于MyBatis XML配置方法(全面了解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06

最新評(píng)論