SpringBoot異常自動處理機制

2021-09-25 04:30:34 字數 2919 閱讀 7925

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...