亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring Boot 中的默認異常處理機制及執(zhí)行流程

 更新時間:2025年07月24日 11:19:22   作者:MadeInSQL  
SpringBoot內(nèi)置BasicErrorController,自動處理異常并生成HTML/JSON響應(yīng),支持自定義錯誤路徑、配置及擴展,如ErrorController和@ControllerAdvice,實現(xiàn)靈活的錯誤處理機制,對Spring Boot 默認異常處理機制相關(guān)知識感興趣的朋友一起看看吧

Spring Boot 異常處理機制詳解

Spring Boot 提供了一套完善的默認異常處理機制,通過內(nèi)置的 BasicErrorController 自動處理應(yīng)用中的各類異常情況。這套機制基于 Spring MVC 的異常處理框架構(gòu)建,具有以下特點:

  1. 多格式響應(yīng)支持:

    • 對于傳統(tǒng)Web應(yīng)用:當發(fā)生異常時,會自動返回錯誤頁面(如 404.html、5xx.html)
    • 對于REST API:會自動生成結(jié)構(gòu)化的JSON錯誤響應(yīng),包含timestamp、status、error、path等字段
  2. 默認錯誤路徑:

    • 提供了/error映射路徑作為統(tǒng)一的錯誤處理入口
    • 可以通過實現(xiàn)ErrorController接口來自定義錯誤處理邏輯
  3. 錯誤頁面配置:

    • 靜態(tài)錯誤頁:支持在src/main/resources/static/error/目錄下放置靜態(tài)錯誤頁
    • 模板錯誤頁:支持在模板引擎目錄(如templates/error/)下放置動態(tài)錯誤頁
    • 支持根據(jù)狀態(tài)碼命名文件(如404.html、500.html)
  4. 內(nèi)置異常轉(zhuǎn)換:

    • 自動將常見異常轉(zhuǎn)換為合適的HTTP狀態(tài)碼
    • 例如:MethodArgumentNotValidException -> 400 Bad Request
    • 例如:NoHandlerFoundException -> 404 Not Found
  5. 配置選項:

    • 通過server.error.*配置項可以自定義錯誤處理行為
    • 例如:server.error.include-message=always(控制錯誤信息是否包含詳細異常信息)

實際應(yīng)用示例:

// 自定義錯誤頁
@Controller
public class MyErrorController implements ErrorController {
    @RequestMapping("/error")
    public String handleError(HttpServletRequest request) {
        Object status = request.getAttribute("javax.servlet.error.status_code");
        if (status != null) {
            Integer statusCode = Integer.valueOf(status.toString());
            if(statusCode == 404) {
                return "error/404";
            } else if(statusCode == 500) {
                return "error/500";
            }
        }
        return "error/generic";
    }
}

這套機制既適用于傳統(tǒng)Web應(yīng)用的頁面錯誤展示,也適配RESTful API的JSON錯誤響應(yīng),為開發(fā)者提供了開箱即用的異常處理解決方案。

默認錯誤頁面功能

當應(yīng)用出現(xiàn)異常時,Spring Boot 會自動展示一個"Whitelabel Error Page"(白色標簽錯誤頁),這個頁面包含以下關(guān)鍵信息:

  • HTTP狀態(tài)碼(如404、500等)
  • 錯誤發(fā)生的時間戳(精確到毫秒)
  • 具體的錯誤信息(異常消息)
  • 請求的URL路徑
  • 錯誤跟蹤ID(便于日志關(guān)聯(lián))

例如:

  • 訪問不存在的URL時,會返回一個包含"404 Not Found"狀態(tài)的錯誤頁面
  • 服務(wù)器內(nèi)部錯誤時會顯示500錯誤頁面,并附帶相關(guān)錯誤信息
  • 參數(shù)驗證失敗時會返回400錯誤頁面

自動異常轉(zhuǎn)換機制

Spring Boot 會自動將常見的異常類型轉(zhuǎn)換為合適的HTTP狀態(tài)碼:

  1. 404 Not Found

    • 觸發(fā)條件:NoHandlerFoundException
    • 使用場景:當請求的URL沒有對應(yīng)的控制器方法時
    • 示例:訪問 /api/non-existent-endpoint
  2. 400 Bad Request

    • 觸發(fā)條件:MethodArgumentNotValidException(方法參數(shù)驗證失?。?/li>
    • 使用場景:表單驗證失敗、REST API參數(shù)校驗不通過
    • 示例:提交的JSON數(shù)據(jù)缺少必填字段
  3. 500 Internal Server Error

    • 觸發(fā)條件:其他所有未捕獲的異常
    • 使用場景:業(yè)務(wù)邏輯中的運行時異常
    • 示例:數(shù)據(jù)庫連接失敗、空指針異常

錯誤屬性配置選項

開發(fā)者可以通過 application.propertiesapplication.yml 文件自定義錯誤處理行為:

# 控制錯誤信息中是否包含異常消息
server.error.include-message=always # 可選值:always, on_param, never
# 控制是否包含堆棧跟蹤信息
server.error.include-stacktrace=on_param # 可選值:always, on_param, never
# 自定義錯誤處理路徑(默認為/error)
server.error.path=/custom-error
# 是否包含錯誤詳情(綁定異常的具體字段錯誤)
server.error.include-binding-errors=always

默認錯誤處理流程詳解

  1. 異常觸發(fā)階段

    • 當應(yīng)用代碼中拋出異常且未被捕獲時
    • 異常被Spring MVC的 DispatcherServlet 捕獲
  2. 請求轉(zhuǎn)發(fā)階段

    • DispatcherServlet 將異常轉(zhuǎn)發(fā)到配置的錯誤路徑(默認是/error
    • 根據(jù)請求的Accept頭決定響應(yīng)格式(HTML或JSON)
  3. 錯誤處理階段

    • BasicErrorController 處理該請求
    • 收集錯誤信息(狀態(tài)碼、錯誤消息、時間戳等)
    • 對于瀏覽器請求(Accept包含text/html),返回HTML錯誤頁
    • 對于API請求(Accept包含application/json),返回JSON格式的錯誤信息
  4. 響應(yīng)生成階段 JSON響應(yīng)示例:

    {
      "timestamp": "2023-05-15T08:12:34.567+00:00",
      "status": 404,
      "error": "Not Found",
      "path": "/api/non-existent"
    }

擴展機制

雖然Spring Boot提供了默認處理,但開發(fā)者可以通過以下方式擴展:

  1. 自定義ErrorController

    • 實現(xiàn)ErrorController接口
    • 重寫getErrorPath()error()方法
    • 示例:記錄錯誤日志或發(fā)送告警通知
  2. 全局異常處理器

    • 使用@ControllerAdvice注解定義全局異常處理類
    • 配合@ExceptionHandler處理特定異常
    • 示例:
      @ControllerAdvice
      public class GlobalExceptionHandler {
          @ExceptionHandler(value = {UserNotFoundException.class})
          protected ResponseEntity<ErrorResponse> handleUserNotFound(UserNotFoundException ex) {
              ErrorResponse error = new ErrorResponse("USER_NOT_FOUND", ex.getMessage());
              return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);
          }
      }
  3. 繼承ResponseEntityExceptionHandler

    • 繼承Spring提供的基類進行更細粒度的控制
    • 可以覆蓋處理特定MVC異常的默認行為
    • 示例:自定義驗證錯誤的響應(yīng)格式

這套機制使得開發(fā)者可以快速構(gòu)建健壯的應(yīng)用程序,同時保留足夠的靈活性來定制錯誤處理邏輯,滿足特定業(yè)務(wù)場景的需求。

到此這篇關(guān)于Spring Boot 中的默認異常處理機制的文章就介紹到這了,更多相關(guān)Spring Boot 默認異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何基于Idea遠程調(diào)試tomcat war包及jar包

    如何基于Idea遠程調(diào)試tomcat war包及jar包

    這篇文章主要介紹了如何基于Idea遠程調(diào)試tomcat war包及jar包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Idea創(chuàng)建多模塊maven聚合項目的實現(xiàn)

    Idea創(chuàng)建多模塊maven聚合項目的實現(xiàn)

    這篇文章主要介紹了Idea創(chuàng)建多模塊maven聚合項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java設(shè)計模式之java中介者模式詳解

    Java設(shè)計模式之java中介者模式詳解

    這篇文章主要為大家詳細介紹了23種設(shè)計模式之java中介者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-09-09
  • SpringBoot自定義對象參數(shù)超詳細介紹作用

    SpringBoot自定義對象參數(shù)超詳細介紹作用

    SpringBoot通過自定義對象參數(shù),可以實現(xiàn)自動類型轉(zhuǎn)換與格式化,并可以級聯(lián)封裝,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • java 從int數(shù)組中獲取最大數(shù)的方法

    java 從int數(shù)組中獲取最大數(shù)的方法

    這篇文章主要介紹了java 從int數(shù)組中獲取最大數(shù)的方法,需要的朋友可以參考下
    2017-02-02
  • Java實現(xiàn)二分查找樹及其相關(guān)操作

    Java實現(xiàn)二分查找樹及其相關(guān)操作

    二分查找樹是一種有組織的二叉樹。我們可以通過鏈接節(jié)點表示這樣一棵樹,二分查找樹(Binary Search Tree)的基本操作有搜索、求最大值、求最小值、求前驅(qū)、求后繼、插入及刪除,對java二分查找樹相關(guān)知識感興趣的朋友一起看看吧
    2021-07-07
  • 簡單講解Android開發(fā)中觸摸和點擊事件的相關(guān)編程方法

    簡單講解Android開發(fā)中觸摸和點擊事件的相關(guān)編程方法

    這篇文章主要介紹了Android開發(fā)中觸摸和點擊事件的相關(guān)編程方法,包括事件偵聽器等安卓開發(fā)中常用的接口的基本使用方法,需要的朋友可以參考下
    2015-12-12
  • Spring Boot中配置定時任務(wù)、線程池與多線程池執(zhí)行的方法

    Spring Boot中配置定時任務(wù)、線程池與多線程池執(zhí)行的方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot中配置定時任務(wù)、線程池與多線程池執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java實現(xiàn)Windows計算器界面

    Java實現(xiàn)Windows計算器界面

    這篇文章主要為大家詳細介紹了Java實現(xiàn)Windows計算器界面,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 關(guān)于Java集合框架面試題(含答案)上

    關(guān)于Java集合框架面試題(含答案)上

    Java集合框架為Java編程語言的基礎(chǔ),也是Java面試中很重要的一個知識點。這里,我列出了一些關(guān)于Java集合的重要問題和答案。
    2015-12-12

最新評論