springboot的異常處理

2021-10-25 15:30:46 字數 3723 閱讀 2529

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錯誤時,我們自動跳...