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

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

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

Spring Boot 異常處理機(jī)制詳解

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

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

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

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

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

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

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

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

// 自定義錯(cuò)誤頁(yè)
@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";
    }
}

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

默認(rèn)錯(cuò)誤頁(yè)面功能

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

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

例如:

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

自動(dòng)異常轉(zhuǎn)換機(jī)制

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

  1. 404 Not Found

    • 觸發(fā)條件:NoHandlerFoundException
    • 使用場(chǎng)景:當(dāng)請(qǐng)求的URL沒(méi)有對(duì)應(yīng)的控制器方法時(shí)
    • 示例:訪問(wèn) /api/non-existent-endpoint
  2. 400 Bad Request

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

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

錯(cuò)誤屬性配置選項(xiàng)

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

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

默認(rèn)錯(cuò)誤處理流程詳解

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

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

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

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

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

擴(kuò)展機(jī)制

雖然Spring Boot提供了默認(rèn)處理,但開(kāi)發(fā)者可以通過(guò)以下方式擴(kuò)展:

  1. 自定義ErrorController

    • 實(shí)現(xiàn)ErrorController接口
    • 重寫getErrorPath()error()方法
    • 示例:記錄錯(cuò)誤日志或發(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提供的基類進(jìn)行更細(xì)粒度的控制
    • 可以覆蓋處理特定MVC異常的默認(rèn)行為
    • 示例:自定義驗(yàn)證錯(cuò)誤的響應(yīng)格式

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

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

相關(guān)文章

  • 深入理解Spring中bean的生命周期介紹

    深入理解Spring中bean的生命周期介紹

    本篇文章主要介紹了深入理解Spring中bean的生命周期介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):順序隊(duì)列和循環(huán)隊(duì)列

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):順序隊(duì)列和循環(huán)隊(duì)列

    下面小編就為大家分享一篇java隊(duì)列實(shí)現(xiàn)方法(順序隊(duì)列,循環(huán)隊(duì)列),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-08-08
  • Spring Boot中優(yōu)雅的獲取yml文件工具類

    Spring Boot中優(yōu)雅的獲取yml文件工具類

    今天小編就為大家分享一篇關(guān)于Spring Boot中優(yōu)雅的獲取yml文件工具類,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 使用Spring?Security搭建極簡(jiǎn)的安全網(wǎng)站教程

    使用Spring?Security搭建極簡(jiǎn)的安全網(wǎng)站教程

    這篇文章主要為大家介紹了使用Spring?Security搭建極簡(jiǎn)的安全網(wǎng)站教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 使用mybatis 實(shí)現(xiàn)量表關(guān)聯(lián)并且統(tǒng)計(jì)數(shù)據(jù)量的步驟和代碼

    使用mybatis 實(shí)現(xiàn)量表關(guān)聯(lián)并且統(tǒng)計(jì)數(shù)據(jù)量的步驟和代碼

    本文介紹了使用SpringBoot+MyBatis+EasyExcel技術(shù)棧實(shí)現(xiàn)數(shù)據(jù)庫(kù)查詢結(jié)果導(dǎo)出為Excel文件的步驟,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-10-10
  • Java volatile四種內(nèi)存屏障的作用與生效機(jī)制原理詳解

    Java volatile四種內(nèi)存屏障的作用與生效機(jī)制原理詳解

    內(nèi)存屏障是處理器提供的一種指令,用于控制指令執(zhí)行順序和內(nèi)存可見(jiàn)性,在Java中,volatile關(guān)鍵字就是通過(guò)插入內(nèi)存屏障來(lái)實(shí)現(xiàn)其內(nèi)存語(yǔ)義的,下面我將詳細(xì)解釋四種內(nèi)存屏障的含義和工作原理,感興趣的朋友一起看看吧
    2025-09-09
  • 關(guān)于aop切面 注解、參數(shù)如何獲取

    關(guān)于aop切面 注解、參數(shù)如何獲取

    這篇文章主要介紹了關(guān)于aop切面 注解、參數(shù)如何獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2022-01-01
  • Java實(shí)現(xiàn)上傳文件圖片到指定服務(wù)器目錄

    Java實(shí)現(xiàn)上傳文件圖片到指定服務(wù)器目錄

    本文通過(guò)實(shí)例代碼給大家介紹了java上傳文件圖片到指定服務(wù)器目錄的相關(guān)知識(shí),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Spring的異常處理@ExceptionHandler注解解析

    Spring的異常處理@ExceptionHandler注解解析

    這篇文章主要介紹了Spring的異常處理@ExceptionHandler注解解析,當(dāng)一個(gè)Controller中有方法加了@ExceptionHandler之后,這個(gè)Controller其他方法中沒(méi)有捕獲的異常就會(huì)以參數(shù)的形式傳入加了@ExceptionHandler注解的那個(gè)方法中,需要的朋友可以參考下
    2023-12-12
  • Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn)

    Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn)

    隨著項(xiàng)目的不斷演進(jìn)和業(yè)務(wù)需求的增長(zhǎng),很多場(chǎng)景下需要實(shí)現(xiàn)系統(tǒng)的動(dòng)態(tài)性和靈活性,本文主要介紹了Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02

最新評(píng)論

西青区| 汉川市| 贵南县| 当涂县| 镇原县| 吴桥县| 娱乐| 通辽市| 曲靖市| 大埔区| 和林格尔县| 保康县| 南安市| 华蓥市| 沽源县| 准格尔旗| 印江| 镇雄县| 修水县| 巫溪县| 嘉义县| 开阳县| 西畴县| 舟山市| 肥西县| 拜泉县| 阳春市| 六枝特区| 东阿县| 绍兴市| 固安县| 鄂温| 清远市| 烟台市| 花莲市| 南澳县| 敦化市| 大埔区| 双鸭山市| 句容市| 富宁县|