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)當請求一個不存在的接口時,頁面顯示的結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM