国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SSM整合(三) | 異常處理器 - 項(xiàng)目異常的處理方案

這篇具有很好參考價(jià)值的文章主要介紹了SSM整合(三) | 異常處理器 - 項(xiàng)目異常的處理方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

異常處理器

異常處理器快速入門

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

SSM整合(三) | 異常處理器 - 項(xiàng)目異常的處理方案

出現(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ù)類型間導(dǎo)致異常)

工具類拋出的異常:因工具類書(shū)寫(xiě)不嚴(yán)謹(jǐn)不夠健壯導(dǎo)致(例如:必要釋放的連接長(zhǎng)期未釋放等)

各個(gè)層級(jí)均出現(xiàn)異常,異常處理代碼書(shū)寫(xiě)在哪一層都是不合適的

當(dāng)出現(xiàn)異常, 我們讓每一層的異常都不處理往上一層拋出, 所有的異常均拋出到表現(xiàn)層進(jìn)行處理

表現(xiàn)層處理異常,如果每個(gè)方法中都單獨(dú)書(shū)寫(xiě)try…catch…,代碼書(shū)寫(xiě)量巨大且意義不強(qiáng)

采用AOP思想解決

SpringMVC提供了異常處理器:

集中的、統(tǒng)一的處理項(xiàng)目中出現(xiàn)的異常; 既然最終異常是在表現(xiàn)層進(jìn)行統(tǒng)一處理, 那么我們異常處理器的類也需要寫(xiě)在表現(xiàn)層controller包下

@RestControllerAdvice類注解

定義在Rest風(fēng)格開(kāi)發(fā)的控制器增強(qiáng)類定義上方, 為Rest風(fēng)格開(kāi)發(fā)的控制器類做增強(qiáng), 此注解自帶@ResponseBody注解與@Component注解,具備對(duì)應(yīng)的功能

@ExceptionHandler方法注解:

專用于異常處理的控制器方法上方, 用于設(shè)置指定異常的處理方案,功能等同于控制器方法,出現(xiàn)異常后終止原始控制器執(zhí)行,并轉(zhuǎn)入當(dāng)前方法執(zhí)行; 此類方法可以根據(jù)處理的異常不同,制作多個(gè)方法分別處理對(duì)應(yīng)的異常

@RestControllerAdvice // 聲明該類是用來(lái)做異常處理的
public class ProjectExceptionAdvice {
    @ExceptionHandler(Exception.class) // 聲明該方法是攔截所有異常
    public Result doException(Exception ex) {
        // 返回異常提示
        return new Result(666, null, "出現(xiàn)異常");
    }
}

項(xiàng)目異常處理

項(xiàng)目中的異常不能和上面的處理方式一樣

項(xiàng)目異常分類:

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

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

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

  • 項(xiàng)目運(yùn)行過(guò)程中可預(yù)計(jì)且無(wú)法避免的異常, 例如服務(wù)器斷電死機(jī)等

其他異常(Exception)

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

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

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

針對(duì)系統(tǒng)異常(SystemException):

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

針對(duì)其他異常(Exception):

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

使用步驟:

  1. 創(chuàng)建一個(gè)exception包, 在該包下分別創(chuàng)建業(yè)務(wù)異常類和系統(tǒng)異常類:

創(chuàng)建業(yè)務(wù)異常類BusinessException繼承自RuntimeException類

public class BusinessException extends RuntimeException {
    // 添加一個(gè)編號(hào)用于識(shí)別異常
    private Integer 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;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}

創(chuàng)建系統(tǒng)異常SystemException繼承自RuntimeException類

public class SystemException extends RuntimeException{
    // 添加一個(gè)編號(hào)用于識(shí)別異常
    private Integer 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;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }
}
  1. 自定義異常編碼(持續(xù)補(bǔ)充)
public class Code {
    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 SELECT_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 SELECT_ERR = 20040;

    public static final Integer SYSTEM_ERROR = 50001; // 系統(tǒng)異常
    public static final Integer SYSTEM_TIMEOUT_ERROR = 50002; // 請(qǐng)求超時(shí)
  public static final Integer SYSTEM_UNKNOW_ERROR = 59999; // 系統(tǒng)未知異常
    public static final Integer BUSINESS_ERROR = 60001; // 業(yè)務(wù)異常
}
  1. 觸發(fā)自定義異常: 將可能出現(xiàn)的轉(zhuǎn)換為自定義異常

示例: 使用系統(tǒng)異常

@GetMapping("/{id}")
public Result selectById(@PathVariable Integer id) {
    try {
        int i = 1/0;
    } catch (Exception e) {
        throw new SystemException(Code.SYSTEM_TIMEOUT_ERROR, "服務(wù)器訪問(wèn)超時(shí), 請(qǐng)稍后重試", e);
    }

    Book book = bookService.selectById(id);
    boolean flag = book != null;
    Integer code = flag ? Code.SELECT_OK: Code.SELECT_ERR;
    String msg = flag ? "": "數(shù)據(jù)查詢失敗, 請(qǐng)重試!";
    return new Result(code, book, msg);
}

示例: 使用業(yè)務(wù)異常文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-431093.html

@GetMapping("/{id}")
public Result selectById(@PathVariable Integer id) {
    if (id < 0) {
        throw new BusinessException(Code.BUSINESS_ERROR, "請(qǐng)進(jìn)行合法的操作");
    }

    Book book = bookService.selectById(id);
    boolean flag = book != null;
    Integer code = flag ? Code.SELECT_OK: Code.SELECT_ERR;
    String msg = flag ? "": "數(shù)據(jù)查詢失敗, 請(qǐng)重試!";
    return new Result(code, book, msg);
}
  1. 處理器攔截系統(tǒng)異常和業(yè)務(wù)異常并處理
@RestControllerAdvice // 聲明該類是用來(lái)做異常處理的
public class ProjectExceptionAdvice {
    @ExceptionHandler(SystemException.class) // 攔截系統(tǒng)異常
    public Result doSystemException(SystemException e) {
        // 記錄日志...
        // 發(fā)送消息給運(yùn)維...
        // 發(fā)送郵件給開(kāi)發(fā)人員..
        // 返回異常提示
        return new Result(e.getCode(), null, e.getMessage());
    }

    @ExceptionHandler(BusinessException.class) // 攔截業(yè)務(wù)異常
    public Result doBusinessException(BusinessException e) {
        // 返回異常提示
        return new Result(e.getCode(), null, e.getMessage());
    }

    @ExceptionHandler(Exception.class) // 其他異常: 攔截所有的異常
    public Result doException(Exception ex) {
        // 記錄日志...
        // 發(fā)送消息給運(yùn)維...
        // 發(fā)送郵件給開(kāi)發(fā)人員..
        // 返回異常提示
        return new Result(Code.SYSTEM_UNKNOW_ERROR, null, "系統(tǒng)繁忙請(qǐng)稍后再試");
    }
}

到了這里,關(guān)于SSM整合(三) | 異常處理器 - 項(xiàng)目異常的處理方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringMVC之異常處理器

    SpringMVC提供了一個(gè)處理控制器方法執(zhí)行過(guò)程中所出現(xiàn)的異常的接口:HandlerExceptionResolver。 HandlerExceptionResolver接口的實(shí)現(xiàn)類有:DefaultHandlerExceptionResolver(默認(rèn)的)和 SimpleMappingExceptionResolver(自定義的)。 這里配置了兩個(gè)異常,出現(xiàn)其中一個(gè)異常后跳轉(zhuǎn)到error頁(yè)面。 以上就是異

    2024年02月10日
    瀏覽(24)
  • 13、SpringMVC之異常處理器

    13、SpringMVC之異常處理器

    創(chuàng)建名為spring_mvc_exception的新module,過(guò)程參考9.1節(jié)和9.5節(jié) SpringMVC 提供了一個(gè)處理控制器方法執(zhí)行異常的接口:HandlerExceptionResolver HandlerExceptionResolver 接口的實(shí)現(xiàn)類有:DefaultHandlerExceptionResolver 和 SimpleMappingExceptionResolver 實(shí)際工作中,有時(shí)使用 SimpleMappingExceptionResolver 異常解析器

    2024年02月05日
    瀏覽(25)
  • Spring MVC 異常處理器

    Spring MVC 異常處理器

    如果不加以異常處理,錯(cuò)誤信息肯定會(huì)拋在瀏覽器頁(yè)面上,這樣很不友好,所以必須進(jìn)行異常處理。 系統(tǒng)的dao、service、controller出現(xiàn)都通過(guò)throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進(jìn)行異常處理,如下圖: 編寫(xiě)controller 在index.jsp里面定義超鏈接

    2024年01月22日
    瀏覽(30)
  • Spring MVC配置全局異常處理器!?。? decoding=

    Spring MVC配置全局異常處理器!??!

    為什么要使用全局異常處理器:如果不加以異常處理,錯(cuò)誤信息肯定會(huì)拋在瀏覽器頁(yè)面上,這樣很不友好,所以必須進(jìn)行異常處理。 系統(tǒng)的dao、service、controller出現(xiàn)都通過(guò)throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進(jìn)行異常處理,如下圖: 結(jié)果展示: ?

    2024年01月15日
    瀏覽(16)
  • 【微服務(wù)網(wǎng)關(guān)---Gateway 的全局異常處理器】

    【微服務(wù)網(wǎng)關(guān)---Gateway 的全局異常處理器】

    Gateway網(wǎng)關(guān)統(tǒng)一全局異常處理操作 方便前端看到 這里要精細(xì)化翻譯,默認(rèn)返回用戶是看不懂的 所以需要配置一個(gè) Gateway 的全局異常處理器 如果沒(méi)有網(wǎng)關(guān)全局異常的 會(huì)如下截圖 代碼如下: 代碼如下: 代碼如下: 以上就是今天要講的內(nèi)容,本文僅僅簡(jiǎn)單 所以需要配置一個(gè)

    2024年02月12日
    瀏覽(19)
  • Spring Boot 如何自定義異常處理器

    Spring Boot 如何自定義異常處理器

    在Spring Boot應(yīng)用程序中,異常處理是一個(gè)非常重要的方面。如果您不處理異常,應(yīng)用程序可能會(huì)崩潰或出現(xiàn)不可預(yù)料的行為。默認(rèn)情況下,Spring Boot將未捕獲的異常返回給客戶端。這通常不是期望的行為,因?yàn)榭蛻舳丝赡軣o(wú)法理解異常信息。在本文中,我們將介紹如何在Sprin

    2024年02月06日
    瀏覽(21)
  • SpringMVC的攔截器和異常處理器

    目錄 lerInterceptor 攔截器 1、攔截器的作用 2、攔截器的創(chuàng)建 3、攔截器的三個(gè)抽象方法 4、攔截器的配置 5、多個(gè)攔截器的執(zhí)行順序 SpringMVC的異常處理器 1、異常處理器概述 2、基于配置文件的異常處理 3、基于注解的異常處理 攔截器的作用時(shí)機(jī) SpringMVC的攔截器作用于? 控制器

    2024年02月02日
    瀏覽(41)
  • SpringMVC之?dāng)r截器和異常處理器

    學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您: 想系統(tǒng)/深入學(xué)習(xí)某技術(shù)知識(shí)點(diǎn)… 一個(gè)人摸索學(xué)習(xí)很難堅(jiān)持,想組團(tuán)高效學(xué)習(xí)… 想寫(xiě)博客但無(wú)從下手,急需寫(xiě)作干貨注入能量… 熱愛(ài)寫(xiě)作,愿意讓自己成為更好

    2024年02月03日
    瀏覽(21)
  • [ARM 匯編]進(jìn)階篇—異常處理與中斷—2.4.2 ARM處理器的異常向量表

    [ARM 匯編]進(jìn)階篇—異常處理與中斷—2.4.2 ARM處理器的異常向量表

    異常向量表簡(jiǎn)介 在ARM架構(gòu)中,異常向量表是一組固定位置的內(nèi)存地址,它們包含了處理器在遇到異常時(shí)需要跳轉(zhuǎn)到的處理程序的入口地址。每個(gè)異常類型都有一個(gè)對(duì)應(yīng)的向量地址。當(dāng)異常發(fā)生時(shí),處理器會(huì)自動(dòng)跳轉(zhuǎn)到對(duì)應(yīng)的向量地址,并開(kāi)始執(zhí)行異常處理程序。 異常向量表

    2024年02月09日
    瀏覽(89)
  • Spring MVC文件上傳及全局異常處理器

    編寫(xiě)controller 在index.jsp里面定義超鏈接 如果不加以異常處理,錯(cuò)誤信息肯定會(huì)拋在瀏覽器頁(yè)面上,這樣很不友好,所以必須進(jìn)行異常處理。 系統(tǒng)的dao、service、controller出現(xiàn)都通過(guò)throws Exception向上拋出,最后由springmvc前端控制器交由異常處理器進(jìn)行異常處理,如下圖: 編寫(xiě)c

    2024年01月18日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包