errormvcautoconfiguration中注入了四個重要的類,分別是
defaulterrorattributes(用處共享頁面中的資料)、basicerrorcontroller、errorpagecustomizer、defaulterrorviewresolver四個類。
當發生錯誤時,
1、errorpagecustomer會將請求**到/error位址中,
2、然後通過basicerrorcontroller來處理,最終的處理結果是返回乙個modelandview(指定了**的路徑和需要渲染的資料)
這裡springboot是通過請求頭中的資訊來辨別是瀏覽器還是客戶端
2.1、呼叫basicerrorcontroller.errorhtml(httpservletrequest request,httpservletresponse response)方法
2.2、errorhtml方法中呼叫了abstracterrorcontroller.resolveerrorview(httpservletrequest request,httpservletresponse response, httpstatus status, mapmodel)方法。
// abstracterrorcontroller.resolveerrorview方法
}// 如果所有的視**析器都無法解析則返回null
return null;
}
2.3、在遍歷所有視**析器的時候呼叫了defaulterrorviewresolver.resolveerrorview方法
}// defaulterrorviewresolver.resolve方法
private modelandview resolve
(string viewname, map
model)
// 模板引擎不可用則在靜態資源資料夾下尋找errorviewname對應的頁面
return
resolveresource
(errorviewname, model);}
// 去靜態資源資料夾下找對應的頁面,找不到則返回null
private modelandview resolveresource
(string viewname, map
model)
}catch
(exception ex)
}return null;
}2.4、注意看2.1步驟中的**,如果最後解析返回乙個modelandview則會直接渲染後響應給請求,如果返回的是null,則會生成乙個名為 「error」 的 modelandview ,也就是我們熟知的預設錯誤頁面。
@configuration
@conditionalonproperty
(prefix =
"server.error.whitelabel"
, name =
"enabled"
, matchifmissing =
true
)@conditional
(errortemplatemissingcondition.
class
)protected
static
class
whitelabelerrorviewconfiguration"+
"there was an unexpected error (type=$, status=$)."+
"$");
@bean
(name =
"error"
)@conditionalo****singbean
(name =
"error"
)public view defaulterrorview()
// if the user adds @enablewebmvc then the bean name view resolver from
@bean
@conditionalo****singbean
(beannameviewresolver.
class
)public beannameviewresolver beannameviewresolver()
}
在上面也2.3中有分析到defaulterrorviewresolver中視**析器是如何解析的,**有模板引擎的情況下直接將對應錯誤狀態碼的html頁面放入error資料夾下即可。**也可以使用 「4xx.html」 或者"5xx.html" 來處理一種型別的錯誤。沒有模板引擎則直接去靜態資源資料夾下找,如果靜態資源也找不到則返回springboot的預設錯誤頁面 正確使用spring boot預設的異常處理
參考文件 網上都說根據http錯誤碼返回對應頁面,需要自已自定義異常處理什麼之類的,其實spring boot 已經幫我們實現了。繼承basicerrorcontroller時,需要實現乙個建構函式 檢視原始碼時,可以看到該構造函式呼叫了另外乙個方法 有人說 做學問時要不疑處有疑 看 其實也差不多,...
spring boot 錯誤頁,檔案上傳,異常處理
1.放在resources static error下 2.錯誤頁配置 3.檔案上傳 指定上傳的資料夾 spring.servlet.multipart.location e springboot 設定單個檔案最大最小 spring.servlet.multipart.max file size 5...
Spring Boot學習筆記8 統一異常處理
雖然,spring boot中實現了預設的error對映,但是在實際應用中,預設的錯誤頁面對使用者來說並不夠友好,我們通常需要去實現我們自己的異常提示。下面我們以之前的spring bootx學習筆記7 使用thymeleaf模板引擎渲染web檢視為基礎,進行統一異常處理的改造。public cla...