软件遇到错误。 即使是最好的应用程序也会在某些时候遇到错误。 因此,每个应用程序都应该有一些错误处理机制。
Spring Boot 提供了一个默认的 Whitelabel 错误页面作为其错误处理自动配置的组件。 尽管如此,期望开发人员将创建一个自定义错误页面来替换 Whitelabel 错误页面。 在本文中,您将了解如何为 Spring Boot 应用程序自定义错误页面。
目录
Spring Boot 的 Whitelabel 错误页面
当 Spring Boot 应用程序遇到错误时,它会请求 /error URL。 如果此位置没有视图,则会显示 Whitelabel 错误页面:
Whitelabel 错误页面指出错误的日期和时间以及相应的时区。 此外,它还指示错误类型及其关联代码。 Whitelabel 页面指出这是一个 404 错误(找不到页面)。 这是因为示例应用程序没有“/products”URL 的映射。
Whitelabel 错误页面上显示的大部分信息都取自特定的错误属性。 Spring Boot 的错误视图可以访问以下错误属性:
- 错误:错误的原因。
- 时间戳:错误发生的日期和时间。
- status:错误状态码。
- 异常:根异常的类名(如果错误是异常的结果)。
- message:异常消息(如果错误是异常导致的)。
- 错误:BindingResult 异常的任何结果(如果错误是异常的结果)。
- 跟踪:异常堆栈跟踪(如果错误是异常的结果)。
- path:发生错误的URL路径。
使用 Thymeleaf 创建错误页面
您的 Spring Boot 应用程序应该在“错误”模板中存储一个错误页面。 该模板的扩展将根据您决定使用的模板技术而有所不同。 例如,如果您选择 Java Server Pages (JSP) 模板,则文件名应为 error.jsp。
但是,此示例 Spring Boot 应用程序使用 Thymeleaf 模板引擎。 因此,模板名称为 error.html。 您应该始终将错误模板与所有其他模板文件一起放置在资源目录下的模板文件夹中。
error.html 文件
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title> Error</title>
<link rel="stylesheet" th:href="https://wilku.top/how-to-create-custom-spring-boot-error-pages-with-thymeleaf/@{/css/style.css}"/>
</head>
<body th:style="'background: url(/images/background1.jpg)
no-repeat center center fixed;'">
<div class="container" >
<h1>An error has occurred...</h1>
<img th:src="https://wilku.top/how-to-create-custom-spring-boot-error-pages-with-thymeleaf/@{/images/error-icon.png}"
width="100px" height="100px" />
<p>There seems to be a problem with the page you requested
(<span th:text="${path}"></span>).</p>
<p th:text="${'The status code is ' + status
+ ', which means that the page was ' + error + '.'}"></p>
<p th:text="${'Further details: ' + message + '.'}"></p>
<a class="btn" href="https://wilku.top/home">Back to home</a>
</div>
</body>
</html>
定制的错误页面完成了几项重要的任务。 它声明发生了错误。 随后,它显示触发错误的 HTTP 请求。 此外,它还向用户提供与错误相关的状态代码。 但如果用户不熟悉状态代码,页面还会通过错误属性解释代码的含义。
最后一行文本在发生异常时向用户显示一条消息。 然后,最后的链接允许用户导航回主页。 error.html 文件使用 CSS 样式表和两个图像来创建以下视图:
保持错误页面的用户友好性
错误页面的主要目的是通知用户发生了特定错误。 然而,这个错误页面仍然是应用程序的一个方面。 因此,确保错误页面对用户友好至关重要。
这意味着选择使用错误属性以更简单的方式传达错误。 因此,您可能会选择使用路径属性而不是跟踪属性,后者要复杂得多并且包含用户不需要知道的详细信息。
您也不希望向随机用户提供有关应用程序内部工作的过多信息,因为这可能会损害应用程序的安全性。