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

Spring Boot統(tǒng)一異常攔截實踐指南(最新推薦)

 更新時間:2025年02月04日 10:50:50   作者:莫非技術(shù)棧  
本文介紹了Spring Boot中統(tǒng)一異常處理的重要性及實現(xiàn)方案,包括使用`@ControllerAdvice`和`@ExceptionHandler`注解,實現(xiàn)全局異常處理和統(tǒng)一響應(yīng)格式,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧

Spring Boot統(tǒng)一異常攔截實踐指南

一、為什么需要統(tǒng)一異常處理

在Web應(yīng)用開發(fā)中,異常處理是保證系統(tǒng)健壯性和用戶體驗的重要環(huán)節(jié)。傳統(tǒng)開發(fā)模式中常見的痛點包括:

  • 異常處理邏輯分散在各個Controller中
  • 錯誤響應(yīng)格式不統(tǒng)一
  • 敏感異常信息直接暴露給客戶端
  • 重復(fù)編寫相似的異常處理代碼

通過統(tǒng)一異常攔截機制,我們可以:

  • 集中管理異常處理邏輯
  • 規(guī)范API錯誤響應(yīng)格式
  • 自動轉(zhuǎn)換異常為友好提示
  • 減少重復(fù)代碼,提升可維護性

二、核心實現(xiàn)方案

1. 基礎(chǔ)組件

Spring Boot提供了兩個關(guān)鍵注解實現(xiàn)全局異常處理:

  • @ControllerAdvice:定義全局控制器增強
  • @ExceptionHandler:聲明具體的異常處理方法

2. 實現(xiàn)步驟

(1)創(chuàng)建自定義異常類

public class BusinessException extends RuntimeException {
    private final int code;
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }
    // getters
}

(2)實現(xiàn)全局異常處理器

@RestControllerAdvice
public class GlobalExceptionHandler {
    /**
     * 處理業(yè)務(wù)異常
     */
    @ExceptionHandler(BusinessException.class)
    public ResponseResult<Void> handleBusinessException(BusinessException ex) {
        return ResponseResult.fail(ex.getCode(), ex.getMessage());
    }
    /**
     * 處理空指針異常
     */
    @ExceptionHandler(NullPointerException.class)
    public ResponseResult<Void> handleNullPointerException(NullPointerException ex) {
        log.error("空指針異常:", ex);
        return ResponseResult.fail(500, "系統(tǒng)內(nèi)部錯誤");
    }
    /**
     * 處理所有未定義異常
     */
    @ExceptionHandler(Exception.class)
    public ResponseResult<Void> handleGlobalException(Exception ex) {
        log.error("系統(tǒng)異常:", ex);
        return ResponseResult.fail(500, "系統(tǒng)繁忙,請稍后再試");
    }
}

(3)統(tǒng)一響應(yīng)格式封裝

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ResponseResult<T> {
    private int code;
    private String message;
    private T data;
    public static <T> ResponseResult<T> success(T data) {
        return new ResponseResult<>(200, "success", data);
    }
    public static <T> ResponseResult<T> fail(int code, String message) {
        return new ResponseResult<>(code, message, null);
    }
}

三、高級處理技巧

1. 處理參數(shù)校驗異常

配合Validation API自動處理參數(shù)校驗錯誤:

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseResult<Void> handleValidException(MethodArgumentNotValidException ex) {
    String message = ex.getBindingResult()
            .getFieldErrors()
            .stream()
            .map(FieldError::getDefaultMessage)
            .collect(Collectors.joining(", "));
    return ResponseResult.fail(400, message);
}

2. 處理404錯誤

Spring Boot默認的404錯誤需要特殊處理:

@Configuration
public class ErrorConfig implements ErrorController {
    @RequestMapping("/error")
    public ResponseResult<Void> handleNoHandlerFound() {
        return ResponseResult.fail(404, "接口不存在");
    }
}

3. 區(qū)分生產(chǎn)/開發(fā)環(huán)境

在application.properties中配置:

# 開發(fā)環(huán)境顯示詳細錯誤
server.error.include-stacktrace=always
# 生產(chǎn)環(huán)境隱藏細節(jié)
# server.error.include-stacktrace=never

四、方案優(yōu)勢分析

  • 統(tǒng)一響應(yīng)格式:所有異常返回相同結(jié)構(gòu),方便前端處理
  • 異常分類處理:可針對不同異常類型定制處理邏輯
  • 敏感信息過濾:避免暴露堆棧信息等敏感內(nèi)容
  • 日志集中記錄:統(tǒng)一記錄異常日志,便于問題排查
  • 代碼復(fù)用率高:減少Controller層的異常處理代碼

五、最佳實踐建議

  • 定義完善的業(yè)務(wù)異常體系
  • 為不同異常類型設(shè)計合適的HTTP狀態(tài)碼
  • 生產(chǎn)環(huán)境關(guān)閉詳細錯誤信息
  • 配合Swagger等工具生成API文檔
  • 編寫單元測試驗證異常處理邏輯

完整示例代碼結(jié)構(gòu):

src/main/java
├── exception
│   ├── BusinessException.java
│   └── GlobalExceptionHandler.java
├── config
│   └── ErrorConfig.java
└── model
    └── ResponseResult.java

通過實現(xiàn)統(tǒng)一的異常處理機制,可以顯著提升Spring Boot應(yīng)用的健壯性和可維護性。開發(fā)者可以專注于業(yè)務(wù)邏輯開發(fā),同時保證系統(tǒng)的異常處理符合規(guī)范要求。

到此這篇關(guān)于Spring Boot統(tǒng)一異常攔截實踐指南的文章就介紹到這了,更多相關(guān)Spring Boot異常攔截內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Maven打包后找不到class文件的問題

    Maven打包后找不到class文件的問題

    本文主要介紹了Maven打包后找不到class文件的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • java分割日期時間段代碼

    java分割日期時間段代碼

    這篇文章主要為大家詳細介紹了java分割日期時間段代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java內(nèi)建函數(shù)與庫的最佳實踐方式

    Java內(nèi)建函數(shù)與庫的最佳實踐方式

    Java提供了許多高效的內(nèi)建函數(shù)和庫,如Math、String、Arrays、Collections等類,以及java.util.concurrent、java.nio、java.util.stream、java.util.regex和java.time等包,通過利用這些工具和方法,可以顯著提高Java代碼的性能和效率
    2025-03-03
  • Springboot中@Async異步,實現(xiàn)異步結(jié)果合并統(tǒng)一返回方式

    Springboot中@Async異步,實現(xiàn)異步結(jié)果合并統(tǒng)一返回方式

    這篇文章主要介紹了Springboot中@Async異步,實現(xiàn)異步結(jié)果合并統(tǒng)一返回方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java編寫超時工具類實例講解

    Java編寫超時工具類實例講解

    在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于Java編寫超時工具類實例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • 如何在Spring Boot啟動時運行定制的代碼

    如何在Spring Boot啟動時運行定制的代碼

    在本文中您將學(xué)習(xí)如何掛鉤應(yīng)用程序引導(dǎo)程序生命周期并在Spring Boot啟動時執(zhí)行代碼。文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Spring?Boot中獲取request的三種方式及請求過程

    Spring?Boot中獲取request的三種方式及請求過程

    這篇文章主要介紹了Spring?Boot當(dāng)中獲取request的三種方式,包括請求過程流程分析及response常用API,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • Spring整合Mybatis方式之注冊映射器

    Spring整合Mybatis方式之注冊映射器

    這篇文章主要介紹了Spring整合Mybatis方式之注冊映射器,MapperFactoryBean注冊映射器的最大問題,就是需要一個個注冊所有的映射器,而實際上mybatis-spring提供了掃描包下所有映射器接口的方法,每種方式給大家介紹的非常詳細,需要的朋友參考下吧
    2024-03-03
  • 詳解如何在Java中實現(xiàn)懶加載

    詳解如何在Java中實現(xiàn)懶加載

    懶加載是一種常見的優(yōu)化技術(shù),它可以延遲對象的創(chuàng)建或初始化,直到對象第一次被使用時才進行。在本文中,我們將介紹如何使用?Java?中的?Supplier?接口和雙重檢查鎖定模式來實現(xiàn)懶加載,并保證只初始化一次,希望對大家有所幫助
    2023-03-03
  • 詳解Java的Hibernate框架中的List映射表與Bag映射

    詳解Java的Hibernate框架中的List映射表與Bag映射

    這篇文章主要介紹了Java的Hibernate框架中的List映射表與Bag映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12

最新評論