1. 程式人生 > >Spring boot錯誤處理原理

Spring boot錯誤處理原理

錯誤處理原理

ErrorMvcAutoConfiguration
錯誤處理自動配置
這裡寫圖片描述

自動配置

給容器中添加了以下元件

1、DefaultErrorAttributes
2、BasicErrorController
3、ErrorPageCustomizer
4、DefaultErrorViewResolver

錯誤處理過程

一但系統出現4xx或者5xx之類的錯誤
ErrorPageCustomizer
就會生效,定製錯誤的響應規則

registerErrorPages
註冊錯誤頁面的響應規則
這裡寫圖片描述

getPath

path,值為/error
/error,就是從配置檔案中,取出error.path的值

系統出現錯誤以後,來到error請求進行處理
web.xml註冊的錯誤頁面規則
這裡寫圖片描述
就會來到/error請求
就會被BasicErrorController處理

BasicErrorController

基本錯誤處理
這裡寫圖片描述
從配置檔案中,獲取server.error.path的值

如果,沒有配置,獲取error.path的值
如果,也沒有配置,獲取/error的值

處理預設/error請求
這裡寫圖片描述

處理方式

提供了兩種方式
處理/error請求

ModelAndView
產生html型別的資料
瀏覽器傳送的請求,來到這個方法處理

ResponseEntity
產生json資料
其他客戶端,來到這個方法處理

識別原理

根據請求頭來識別
瀏覽器的請求頭
這裡寫圖片描述
客戶端的請求頭
這裡寫圖片描述

ModelAndView

處理瀏覽器請求
去哪個頁面,作為錯誤頁面
錯誤頁面,包含的頁面地址,頁面內容

resolveErrorView

獲取所有的異常檢視解析器
ErrorViewResolver得到ModelAndView

如果,得到了就返回
如果,得不到就為null
這裡寫圖片描述
響應頁面,去哪個頁面
是由DefaultErrorViewResolver解析得到的

DefaultErrorViewResolver

預設錯誤檢視解析器
這裡寫圖片描述
ModelAndView
將檢視名,拼在error/後面
預設SpringBoot可以去找到一個頁面

比如,error/404
如果,模板引擎可以解析
這個頁面地址,就用模板引擎解析

模板引擎可用的情況下
返回到errorViewName指定的檢視地址
這裡寫圖片描述

resolveResource

模板引擎不可用
就在靜態資原始檔夾下
找errorViewName對應的頁面 error/404.html

如果,靜態資原始檔夾下存在,返回這個頁面
如果,靜態資原始檔夾下不存在,返回null
這裡寫圖片描述