1. 程式人生 > 其它 >SpringBoot - 自定義錯誤頁1(基礎:配置404等錯誤的靜態頁面、動態模版頁面)

SpringBoot - 自定義錯誤頁1(基礎:配置404等錯誤的靜態頁面、動態模版頁面)

在之前的文章中我介紹瞭如何使用@ControllerAdvice來進行全域性異常處理,但是這種異常處理方式一般用來處理應用級別的異常,一些容器級別的錯誤就處理不了,比如Filter中丟擲的異常。因此,Spring Boot中對於異常的處理還有另外的方式。

比如預設情況下,當我們通過Postman等工具來請求一個不存在的介面,則會返回如下json格式的錯誤資料:

而如果是通過瀏覽器訪問的話,Spring Boot則會有一個預設的錯誤頁面展示給使用者。

無論是錯誤頁面還是裡面的顯示內容都是可以自定義的,下面分別進行介紹。

一、基本配置

1,使用靜態頁面

(1)如果不需要向用戶展示詳細的錯誤資訊,可以把錯誤資訊定義成靜態頁面。即在resource/static目錄下建立error目錄,然後在error目錄中建立錯誤展示頁面。錯誤展示頁面命名規則有如下兩種:

    • 一種是直接使用具體的響應碼命名檔案,比如:404.html、405.html、500.html
    • 另一種可以使用4xx.html、5xx.html這樣的命名
如果使用者定義了多個錯誤頁面,它們優先順序如下:
響應碼.html 的優先順序高於 4xx.html、5xx.html 頁面的優先順序。比如:發生一個 404 錯誤,則優先展示 404.html 而不是 4xx.html
動態頁面的優先順序高於靜態頁面。比如:resource/templates 和 resocurce/static 下同時定義了 4xx.html,則優先展示 resources/templates/4xx.html

(2)比如404.html裡面的內容如下:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    發生了404錯誤。
</body> </html>

(3)如果使用瀏覽器訪問一個不存在的介面,顯示的結果如下:

2,使用動態模版

(1)如果需要向用戶展示完整的錯誤資訊,就需要採用檢視模版技術。這裡以Thymeleaf為例,首先引入模版相關的依賴。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
(2)Thymeleaf頁面模版預設處於resource/templates目錄下,因此在該目錄下建立error目錄,在建立錯誤展示頁。

(3)4xx.html裡的內容如下,展示出Spring Boot返回的5條錯誤相關資訊,分別是:timestamp、status、error、message、path

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1">
        <tr>
            <td>timestamp</td>
            <td th:text="${timestamp}"></td>
        </tr>
        <tr>
            <td>status</td>
            <td th:text="${status}"></td>
        </tr>
        <tr>
            <td>error</td>
            <td th:text="${error}"></td>
        </tr>
        <tr>
            <td>message</td>
            <td th:text="${message}"></td>
        </tr>
        <tr>
            <td>path</td>
            <td th:text="${path}"></td>
        </tr>
    </table>
</body>
</html>

(4)當請求一個不存在的介面時,頁面顯示的結果如下:

早年同窗始相知,三載瞬逝情卻萌。年少不知愁滋味,猶讀紅豆生南國。別離方知相思苦,心田紅豆根以生。