springboot預設情況下對於異常的處理提供了預設的錯誤頁面,如果我們想要自定義屬於自己的異常頁面同時自己來處理不同型別的異常**到不同的頁面,可以進行相關的配置。
在template目錄下建立乙個名為error的目錄,目錄名必須是error,這樣專案啟動springboot就會自動找到該目錄下的錯誤頁面。錯誤頁面的名稱以4xx.html或者5xx.html為例,springboot會根據狀態碼進行對應的跳轉。
那麼,如何實現不同的狀態碼跳轉到不同的頁面,例如,404異常我希望跳轉到404.html頁面,其他的異常和錯誤都跳轉到error.html頁面。
在此,可以通過自定義***來攔截controller中的異常來完成以上功能。
/**
* 自定義異常類,該類表示找不到資源丟擲的異常
//返回的狀態碼,表示該異常為找不到資源異常
public
class
notfoundexception
extends
runtimeexception
public
notfoundexception
(string message)
public
notfoundexception
(string message, throwable cause)
}
@responsestatus註解解析:
該註解有兩個引數:value表示設定異常的狀態碼,reason表示異常的描述。
/**
* 該類為控制器異常的***,用於攔截所有controller中發生的異常然後**到自定義的異常介面
*/@controlleradvice
//該註解表示攔截所有帶有@controller註解的類
public
class
controllerexecptionhandler
,exception : {}"
,request.
getrequesturl()
,e);
//記錄請求的url和異常資訊
//該異常處理***會攔截所有的exception,也包含自定義的異常,也就是說自定義的404異常也會跳轉到錯誤頁面,所以在此要進行分支排除
if(annotationutils.
findannotation
(e.getclass()
, responsestatus.
class
)!=null)
modelandview mv=
newmodelandview()
; mv.
addobject
("url"
,request.
getrequesturl()
);mv.
addobject
("exception"
,e);
mv.setviewname
("error/error");
//將請求的url和異常資訊都儲存到modelandview中傳遞到前台自定義的error頁面
return mv;
}}
該***可以攔截指定包下的所有異常,在此我將所有的異常資訊和請求資訊都通過logger物件列印在日誌中,並且儲存到modelandview物件傳送到error.html頁面。但是通過if分支結構將自定義的404異常篩選出來了,並且丟擲。
在此就實現了404異常不會被攔截,預設被springboot框架分配到/error/404.html頁面,而其他異常則被攔截處理,跳轉到error.html頁面。
<
!doctype html>
"en" xmlns:th=
"">
"utf-8"
>
錯誤<
/title>
<
/head>
錯誤<
/h1>
"''" th:remove=
"tag"
>
<
/div>
<
/div>
<
/body>
<
/html>eror.html頁面**如上,除了顯示給使用者的提示資訊之外,異常的相關資訊不會被展示出來,但是可以通過右鍵檢視網頁源**的形式檢視相關資訊。
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錯誤時,我們自動跳...