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

springboot全局異常處理方式

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

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

1、try…catch處理異常

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

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

2、全局異常處理器

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

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

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

三、全局異常處理實現(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結果類

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);
    }
}

四、測試

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

啟動springboot項目

使用apifox發(fā)送請求,請求結果如下所示:

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

五、@ControllerAdvice詳解

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

以下是 @ControllerAdvice 注解的一些關鍵點:

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

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

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

六、@ExceptionHandler 詳解

1.用法:

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

2.參數(shù):

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

3.異常處理邏輯:

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

4.多個異常處理方法:

  • 一個控制器類可以有多個異常處理方法,用來處理不同類型的異常。
  • 當多個異常處理方法都能處理同一類型的異常時,Spring 框架會選擇最匹配的異常處理方法來處理異常。

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

    Springboot配置端口號全過程

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

    使用IDEA如何拉取GitLab項目

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

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

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

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

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

最新評論

凉城县| 新津县| 察哈| 抚远县| 盐池县| 肇源县| 镇安县| 淳化县| 祁门县| 淮南市| 扶余县| 阿拉善右旗| 洪洞县| 鄂温| 密云县| 浪卡子县| 宁乡县| 苏尼特左旗| 诸暨市| 安岳县| 开江县| 沈阳市| 新邵县| 融水| 保靖县| 云林县| 乌兰浩特市| 保亭| 高尔夫| 姜堰市| 钟山县| 遵义县| 白河县| 嘉黎县| 长兴县| 平顶山市| 罗平县| 特克斯县| 宁安市| 凌海市| 行唐县|