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