在 Spring Boot 中自定义 Whitelabel 错误页面

x33g5p2x  于2022-09-25 转载在 Spring  
字(2.8k)|赞(0)|评价(0)|浏览(396)

在本文中,我们将介绍著名的 Spring Boot Whitelabel 错误页面。我们将介绍如何禁用默认错误页面以及如何在您的 Spring Boot 应用程序中自定义 Whitelabel 错误页面

1. 简介

Spring Boot 使用默认的 Whitelabel 错误页面 以防服务器错误。这不是很有帮助,我们可能希望在生产环境中向客户提供更多相关信息。本文重点介绍 Spring Boot 白标错误页面。我们将学习如何禁用此默认行为以及如何使用我们自己的自定义错误页面与我们的 UI 保持一致。

2. 禁用Whitelabel 错误页面

有多种方法可以在 Spring Boot 应用程序中禁用此行为。让我们介绍执行此操作的常用选项。

2.1 使用属性文件。

Spring Boot 提供了一个 application.properties(或 YAML)文件来轻松配置/更改您的应用程序。我们可以使用相同的属性文件来全局禁用这个错误页面。将 server.error.whitelabel.enabled 设置为 false 以实现此目的。

# Whether to enable the default error page displayed in browsers in case of a server error.

server.error.whitelabel.enabled=false

将此条目添加到 application.properties 文件将禁用错误页面并显示源自底层应用程序容器(例如 Tomcat)的简洁页面。

我们可以通过排除 ErrorMvcAutoConfiguration bean 来实现相同的结果。 我们可以通过将此条目添加到属性文件来做到这一点:

#for Spring Boot 1.x
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration
 
#for Spring Boot 2.0
#spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

对于这两个不同的版本,要排除不同的类。由于我们在本教程中使用 Spring Boot 2.x,因此我们正在考虑对第二行进行更改。

2.2 使用@EnableAutoConfiguration 排除

如果您想使用代码排除,您可以选择将排除配置列表传递给 @EnableAutoConfiguration 注释。

@SpringBootApplication
@EnableAutoConfiguration(exclude = {
 ErrorMvcAutoConfiguration.class
})
public class SpringBootApplication { 
    //application code 
}

上面提到的所有方法都会禁用白标错误页面。这给我们留下了一个问题,谁来实际处理错误?

好吧,如上所述,它通常是底层应用程序容器。好消息是我们可以通过显示自定义错误页面而不是所有默认值来进一步自定义内容——这是下一节的重点。

3。显示自定义错误页面

正如建议的那样,第一个选项是使用您自己的模板覆盖错误页面。对于这篇文章,我们将 Thymeleaf 作为我们的底层模板引擎。我们创建一个名为 error.html 的自定义错误页面,并将其保存在 resources/templates 目录下。如果出现错误,Spring Boot 系统会自动选择这个自定义的错误页面。在自定义错误页面之前,让我们看看页面的样子。

让我们创建自定义 error.html 并将其放在 *resources/templates* 目录下。

<!DOCTYPE html>
<html>
<body>
<h1>Something went wrong! </h1>
<h2>We are looking into it!</h2>
<a href="/">Go Home</a>
</body>
</html>

如果我们运行我们的应用程序**,它会自动被默认的 Spring Boot 的 BasicErrorController 拾取。

这就是我们显示自定义错误页面所需的全部内容。通过一些样式,我们现在将为我们的用户提供一个更好看的错误页面:

3.1。自定义错误控制器

到目前为止的限制是我们无法在发生错误时运行自定义逻辑。为此,我们必须创建一个错误控制器 bean 来替换默认的。

为此,我们必须创建一个实现 ErrorController 接口 并覆盖其 *getErrorPath() *以返回自定义路径以在发生错误时调用:

@Controller
public class CustomErrorController implements ErrorController {

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String error() {
        return "customError";
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }

}

让我们看看上面的代码。

  • 我们的控制器为 getErrorPath() 方法返回的路径创建映射。
  • ErrorController 界面显示 @Controller 用于呈现错误。
  • 我们可以选择使用 getErrorPath() 根据错误类型返回不同的错误页面。

让我们创建一个新的错误页面,我们将在这个新的控制器方法中使用它。

<!DOCTYPE html>
<html>
<body>
<h1>Something went wrong!  This is a Custom Error Page</h1>
<h2>We are looking into it!</h2>
<a href="/">Go Home</a>
</body>
</html>

当我们这次运行我们的应用程序时,我们将向客户显示一个不同的错误页面(新创建的)。

结论

在这篇文章中,我们将介绍如何禁用 Spring Boot Whitelabel 错误页面,以及我们如何在您的 Spring Boot 应用程序中自定义 Whitelabel 错误页面。我们学习了如何通过在自定义错误处理控制器中实现 ErrorController 来扩展错误处理机制。一如既往,请在 Github 中找到代码:Click Here

相关文章