最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot全局異常處理方式

 更新時(shí)間:2025年11月27日 09:54:01   作者:q***4718  
文章介紹了Spring Boot中處理異常的兩種方式,還詳細(xì)解釋了@ControllerAdvice和@ExceptionHandler注解的用法,并通過一個(gè)示例展示了全局異常處理的效果,感興趣的朋友跟隨小編一起看看吧

一、springboot中處理異常的方式?

1、try…catch處理異常

如果采用這種方式,雖然可以解決,但是存在弊端,需要我們?cè)诒4嫫渌麡I(yè)務(wù)數(shù)據(jù)時(shí),也需要在其他方法中加上try…catch進(jìn)行處理,代碼冗余,不通用。

  • 代碼可讀性:業(yè)務(wù)邏輯代碼中混入大量的異常處理代碼會(huì)降低代碼的可讀性,使得主要業(yè)務(wù)邏輯變得難以理解和維護(hù)。
  • 代碼可維護(hù)性:如果在每個(gè)可能拋出異常的地方都使用try...catch,將使得代碼變得冗長(zhǎng)和復(fù)雜,增加維護(hù)成本。
  • 異常的傳播:異常的目的是傳遞錯(cuò)誤信息,如果每個(gè)地方都捕獲并處理異常,可能會(huì)隱藏錯(cuò)誤的根本原因,使得問題難以被發(fā)現(xiàn)和解決。

2、全局異常處理器

Spring Boot的全局異常處理是通過@ControllerAdvice@RestControllerAdvice注解的類來(lái)實(shí)現(xiàn)的。這些類可以捕獲和處理應(yīng)用程序中的異常,并返回統(tǒng)一的錯(cuò)誤響應(yīng)。

二、為什么需要全局異常處理?

  • 統(tǒng)一錯(cuò)誤響應(yīng):**全局異常處理允許你定義一個(gè)統(tǒng)一的錯(cuò)誤響應(yīng)格式,這樣無(wú)論在應(yīng)用程序的哪個(gè)部分發(fā)生異常,都能返回一致的錯(cuò)誤信息。**這有助于前端開發(fā)者更好地處理錯(cuò)誤,提升用戶體驗(yàn)。
  • 避免代碼重復(fù):如果沒有全局異常處理,你可能需要在每個(gè)控制器或服務(wù)中重復(fù)編寫異常處理代碼。全局異常處理機(jī)制可以集中處理異常,減少代碼重復(fù),提高代碼的可維護(hù)性。
  • 增強(qiáng)可維護(hù)性:集中管理異常處理邏輯使得代碼更加模塊化,易于維護(hù)和更新。當(dāng)需要修改錯(cuò)誤處理邏輯時(shí),你只需要在一個(gè)地方進(jìn)行修改,而不需要逐個(gè)修改每個(gè)控制器或服務(wù)。
  • 提高系統(tǒng)的健壯性:全局異常處理可以捕獲并處理那些在應(yīng)用程序運(yùn)行過程中可能未被預(yù)期到的異常。這有助于避免應(yīng)用程序因未處理的異常而崩潰,增強(qiáng)了系統(tǒng)的健壯性。
  • 日志記錄和監(jiān)控:全局異常處理通常伴隨著日志記錄,這有助于開發(fā)者在開發(fā)和生產(chǎn)環(huán)境中監(jiān)控和診斷問題。通過記錄詳細(xì)的錯(cuò)誤信息和堆棧跟蹤,可以快速定位問題并進(jìn)行修復(fù)。
  • 安全性”通過全局異常處理,可以避免將敏感的系統(tǒng)信息(如內(nèi)部錯(cuò)誤代碼或堆棧跟蹤)暴露給用戶。你可以自定義錯(cuò)誤信息,只向用戶顯示必要的錯(cuò)誤詳情,從而提高系統(tǒng)的安全性。
  • 符合RESTful API設(shè)計(jì)原則:在RESTful API設(shè)計(jì)中,使用HTTP狀態(tài)碼來(lái)表示不同的錯(cuò)誤類型是一種常見的做法。全局異常處理可以幫助你根據(jù)異常類型自動(dòng)設(shè)置合適的HTTP狀態(tài)碼,符合RESTful API的設(shè)計(jì)原則。
  • 減少客戶端處理復(fù)雜性:當(dāng)客戶端(如移動(dòng)應(yīng)用或前端應(yīng)用)調(diào)用后端服務(wù)時(shí),全局異常處理可以確保返回一個(gè)清晰、一致的錯(cuò)誤格式。這使得客戶端開發(fā)者更容易理解和處理這些錯(cuò)誤,減少客戶端代碼的復(fù)雜性。

三、全局異常處理實(shí)現(xiàn)

全局異常處理類

package com.example.demo.exception;
import com.example.demo.response.Result;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalException {
    @ExceptionHandler(value = {Exception.class})
    public Result<String> ex(Exception e)
    {
        return Result.error(e.getMessage());
    }
}

controller類

    @GetMapping("test")
    public int test(){
        List<Integer> integers = new ArrayList<>();
        for (int i = 0; i < 10; i++){
            integers.add(i);
        }
        //故意數(shù)組過界
        for (int i = 0; i < 20; i++){
            System.out.println(integers.get(i));
        }
        return 1;
    }

result結(jié)果類

package com.example.demo.response;
import lombok.Data;
@Data
public class Result<T> {
    private int code;
    private String msg;
    private T data;
    public Result() {
    }
    public Result(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }
    public static Result<String> error(String message) {
        return new Result(500, message, null);
    }
}

四、測(cè)試

我下面使用到的工具是apifox,當(dāng)然你也可以直接使用postman或者瀏覽器測(cè)試。

啟動(dòng)springboot項(xiàng)目

使用apifox發(fā)送請(qǐng)求,請(qǐng)求結(jié)果如下所示:

這個(gè)地方我們就可以發(fā)現(xiàn)實(shí)際上就是自動(dòng)的幫我們做了異常處理了,當(dāng)然我給的這個(gè)實(shí)例只是針對(duì)于全部的異常而不是自定義的異常。

五、@ControllerAdvice詳解

@ControllerAdvice 是 Spring MVC 提供的一個(gè)注解,用于定義一個(gè)類作為全局異常處理器。使用這個(gè)注解的類可以捕獲和處理來(lái)自 Spring MVC 控制器的異常。

以下是 @ControllerAdvice 注解的一些關(guān)鍵點(diǎn):

  • 作用域:通常用于處理@Controller@RestController中拋出的異常。
  • 方法:在類中定義的方法可以使用@ExceptionHandler注解來(lái)指定處理特定類型的異常。
  • 返回類型:處理方法通常返回ModelAndViewResponseEntity對(duì)象,以便控制視圖和響應(yīng)狀態(tài)。

當(dāng)然@ControllerAdvice也是可以設(shè)置參數(shù)的,可以設(shè)置不是作用于全部的controller下,具體實(shí)例如下所示:

@RestControllerAdvice(annotations = {RestController.class})
???????@ControllerAdvice(annotations = {RestController.class, Controller.class})

六、@ExceptionHandler 詳解

1.用法:

  • @ExceptionHandler 注解可以用于方法級(jí)別,用于標(biāo)記一個(gè)方法為異常處理方法。
  • 異常處理方法需要定義在控制器類中,并且可以有任意的訪問修飾符。

2.參數(shù):

  • 異常處理方法的參數(shù)可以是異常類型,也可以是其他類型的參數(shù)。
  • 如果異常處理方法的參數(shù)是異常類型,則該方法只會(huì)處理指定類型的異常。
  • 如果異常處理方法的參數(shù)是其他類型的參數(shù),則該方法會(huì)處理所有類型的異常,并且異常對(duì)象會(huì)作為參數(shù)傳遞給方法。

3.異常處理邏輯:

  • 異常處理方法可以編寫任意的異常處理邏輯,比如記錄日志、返回錯(cuò)誤信息、執(zhí)行特定的補(bǔ)救措施等。
  • 在方法中可以通過異常對(duì)象來(lái)獲取異常信息,如異常消息、堆棧軌跡等。

4.多個(gè)異常處理方法:

  • 一個(gè)控制器類可以有多個(gè)異常處理方法,用來(lái)處理不同類型的異常。
  • 當(dāng)多個(gè)異常處理方法都能處理同一類型的異常時(shí),Spring 框架會(huì)選擇最匹配的異常處理方法來(lái)處理異常。

到此這篇關(guān)于springboot全局異常處理方式的文章就介紹到這了,更多相關(guān)springboot全局異常內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Sentinel熔斷規(guī)則原理示例詳解分析

    Sentinel熔斷規(guī)則原理示例詳解分析

    這篇文章主要介紹了Sentinel熔斷規(guī)則,采用了示例代碼的方式對(duì)Sentinel熔斷規(guī)則進(jìn)行了詳細(xì)的分析,以便廣大讀者朋友們更易理解,有需要的朋友可以參考下
    2021-09-09
  • Java參數(shù)校驗(yàn)詳解之使用@Valid注解和自定義注解進(jìn)行參數(shù)驗(yàn)證

    Java參數(shù)校驗(yàn)詳解之使用@Valid注解和自定義注解進(jìn)行參數(shù)驗(yàn)證

    在后端開發(fā)中,參數(shù)校驗(yàn)是非常普遍的,下面這篇文章主要給大家介紹了關(guān)于Java參數(shù)校驗(yàn)詳解之使用@Valid注解和自定義注解進(jìn)行參數(shù)驗(yàn)證的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-06-06
  • Matlab及Java實(shí)現(xiàn)小時(shí)鐘效果

    Matlab及Java實(shí)現(xiàn)小時(shí)鐘效果

    這篇文章主要為大家詳細(xì)介紹了Matlab及Java實(shí)現(xiàn)小時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java實(shí)現(xiàn)浮點(diǎn)數(shù)轉(zhuǎn)人民幣的小例子

    java實(shí)現(xiàn)浮點(diǎn)數(shù)轉(zhuǎn)人民幣的小例子

    java實(shí)現(xiàn)浮點(diǎn)數(shù)轉(zhuǎn)人民幣的小例子,需要的朋友可以參考一下
    2013-03-03
  • IDEA多線程文件下載插件開發(fā)的步驟詳解

    IDEA多線程文件下載插件開發(fā)的步驟詳解

    這篇文章主要介紹了IDEA多線程文件下載插件開發(fā)的步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • SpringMVC的常見數(shù)據(jù)綁定實(shí)戰(zhàn)舉例(以登錄為例演練)

    SpringMVC的常見數(shù)據(jù)綁定實(shí)戰(zhàn)舉例(以登錄為例演練)

    文章以登錄功能為例,詳解SpringMVC的數(shù)據(jù)綁定機(jī)制,涵蓋簡(jiǎn)單類型、POJO、自定義轉(zhuǎn)換器(如Date和Signon)、數(shù)組及集合類型等場(chǎng)景,通過Signon類和相關(guān)控制器方法演示如何處理不同數(shù)據(jù)類型的綁定與驗(yàn)證,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Springboot配置端口號(hào)全過程

    Springboot配置端口號(hào)全過程

    Springboot項(xiàng)目可以通過application.yml、application.properties或代碼指定端口號(hào),2.x版本以上EmbeddedServletContainerCustomizer已被替代,CMD啟動(dòng)可指定端口號(hào),配置加載順序依次為yml、properties、命令行
    2026-05-05
  • 使用IDEA如何拉取GitLab項(xiàng)目

    使用IDEA如何拉取GitLab項(xiàng)目

    使用IDEA拉取GitLab項(xiàng)目,首先需要組長(zhǎng)提供的socket和賬號(hào)密碼登錄內(nèi)網(wǎng)的GitLab,打開IDEA,選擇新建項(xiàng)目,選擇Project from Version Control,然后在項(xiàng)目路徑后面添加.git,以上步驟為個(gè)人操作經(jīng)驗(yàn),希望能為大家提供參考
    2024-10-10
  • java1.8安裝及環(huán)境變量配置教程

    java1.8安裝及環(huán)境變量配置教程

    這篇文章主要介紹了java1.8安裝及環(huán)境變量配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲

    java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了java基礎(chǔ)實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11

最新評(píng)論

根河市| 开封县| 柞水县| 常山县| 灵山县| 肇庆市| 从江县| 南召县| 泰州市| 耿马| 宿松县| 勃利县| 调兵山市| 西乡县| 罗定市| 天台县| 清水河县| 井冈山市| 台北县| 晋江市| 南充市| 海晏县| 青冈县| 余干县| 湛江市| 罗甸县| 宁强县| 茂名市| 兴化市| 伊吾县| 阿合奇县| 松原市| 城步| 土默特右旗| 南溪县| 丰县| 绩溪县| 呼伦贝尔市| 汾西县| 文登市| 盖州市|