1、預設規則
• 預設情況下,spring boot提供/error處理所有錯誤的對映 •對於機器客戶端,它將生成json響應,其中包含錯誤,http狀態和異常訊息的詳細資訊。對於瀏覽器客戶端,響應乙個「
whitelabel」錯誤檢視,以html格式呈現相同的資料
瀏覽器預設錯誤頁面非瀏覽器客戶端預設響應資料
• 要對其進行自定義,新增view解析為error • 要完全替換預設行為,可以實現 errorcontroller並註冊該型別的bean定義,或新增errorattributes型別的元件以使用現有機制但替換其內容。 •
error/下的4xx,5xx頁面會被自動解析,錯誤時自動訪問響相應頁面;
異常處理自動配置原理
• errormvcautoconfiguration 自動配置異常處理規則• 容器中的元件:型別:defaulterrorattributes -> id:errorattributes
• public class defaulterrorattributes implements errorattributes,
handlerexceptionresolver
• defaulterrorattributes:定義錯誤頁面中可以包含哪些資料。
• 容器中的元件:型別:basicerrorcontroller --> id:basicerrorcontroller(json+白頁定製錯誤處理邏輯適配響應)
• 處理預設 /error 路徑的請求;頁面響應 new modelandview(「error」, model);
• 容器中有元件 view->id是error;(響應預設錯誤頁)
• 容器中放元件 beannameviewresolver(視**析器);按照返回的檢視名作為元件的id去容器中找view物件。
• 容器中的元件:型別:defaulterrorviewresolver -> id:conventionerrorviewresolver
• 如果發生錯誤,會以http的狀態碼 作為檢視頁位址(viewname),找到真正的頁面
• error/404、5xx.html
• 自定義錯誤頁• 方法一:error/404.html error/5xx.html;有精確的錯誤狀態碼頁面就匹配精確,沒有就找 4xx.html;如果都沒有就觸發白頁
• 方法二:@controlleradvice+@exceptionhandler處理全域性異常;底層是 exceptionhandlerexceptionresolver 支援的
@controlleradvice
public
class
globalexceptionhandler
)//處理異常
public string handlearithexception
(exception e)
",e)
;return
"login"
;//檢視位址
}}
• 方法三:@responsestatus+自定義異常 ;底層是 responsestatu***ceptionresolver,把responsestatus註解的資訊底層呼叫 response.senderror(statuscode,resolvedreason);tomcat傳送的/error
這種異常會返回對應狀態碼的錯誤頁面@responsestatus(value= httpstatus.forbidden,reason => 「使用者數量太多」)//自定義的異常
"使用者數量太多"
)public
class
usertoomanyexception
extends
runtimeexception
public
usertoomanyexception
(string message)
}
//controller中丟擲異常
throw
newusertoomanyexception()
;
• spring底層的異常,如 引數型別轉換異常;defaulthandlerexceptionresolver 處理框架底層的異常。引用response.senderror(httpservletresponse.sc_bad_request, ex.getmessage());方法四:自定義實現 handlerexceptionresolver 處理異常;可以作為預設的全域性異常處理規則
@order
(value= ordered.highest_precedence)
//優先順序,數字越小優先順序越高
@component
public
class
customerhandlerexceptionresolver
implements
handlerexceptionresolver
catch
(ioexception e)
return
newmodelandview();}}
• errorviewresolver 實現自定義處理異常;• response.senderror 。error請求就會轉給controller
• 你的異常沒有任何人能處理。tomcat底層 response.senderror。error請求就會轉給controller
• basicerrorcontroller 要去的頁面位址是 errorviewresolver ;
springBoot異常處理
使得訪問 exception一定會產生異常 some exception controller public class exceptioncontroller return hello 再寫個全域性異常處理類 controlleradvice public class globalexceptio...
Spring Boot 處理異常
原理 略 1 在template下建立error目錄,在error目錄中,建立404.html頁面,如果發生錯誤 為404,就會去找這個頁面 可以建立所有的狀態碼頁面 2 在error目錄中,建立4xx.html頁,如果找不到對應的狀態碼頁面,就會去找4xx.html頁面 注意4xx.html就是4...
springboot異常處理
1.springboot預設發生異常會跳轉到白頁 2.自定義錯誤頁 我們在templates error路徑下新增404.html和5xxhtml 注意使用 thymeleaf 時候,所有的html檔案要新增命名空間 發生404錯誤時,我們就會自動跳轉到404.html 發生5xx錯誤時,我們自動跳...