【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)

文章目录

  • 背景
  • 安排
    • 方案
    • 步骤
  • 验证

背景

  • 一个短链服务,业务将长链接给我,我转换成短地址,用户访问短地址时,我再做redirect;
  • 没有前端,纯后端项目
  • 短链会有过期时间,过期后将返回错误信息
  • 某一天一个宁静的下午,业务反馈,你这错误码,直接给用户看,不友好,麻烦弄一个404页面吧。

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)_第1张图片

当前代码如下:当查询不到对应链接(过期、或者不存在)时,返回JSON格式的统一响应:

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)_第2张图片

灵机一动,不需要JSON是吧,我直接返回404不就行了吗?于是稍作改动:

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)_第3张图片

此时再访问,会跳转到默认的error页面,看起来是比一个JSON串友好,但是,这东西,除了咱们这些计算机科学家,大部分人也看不懂,还是不友好!!!

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)_第4张图片

安排

方案

有三种方法可以解决眼下的问题:

  • 方法一:在配置文件中设置server.error.whitelabel.enabledfalse,然后在controller中定义/error请求,返回自定义的内容。
  • 方法二:在项目中创建一个名为error的视图(如HTML或JSP文件),放在模板目录下(如src/main/resources/templates),然后SpringBoot会自动将错误请求转发到该视图。
  • 方法三:实现ErrorPageRegistrar接口,注册不同的错误页面,针对不同的HTTP状态码。
  • 方法四:搭一个nginx,作为404页面的静态资源服务器。

用户需求是返回一个好看的404页面,方法一排除;

项目是纯后端项目,方法二排除;

为一个页面搭一个nginx,不值当,方法四排除;

所以,选定方法三。

步骤

方法三的详细说明如下:

  • 首先,你需要创建一个配置类,实现ErrorPageRegistrar接口,这个接口有一个方法registerErrorPages,用于注册不同的错误页面。
  • 然后,你需要在registerErrorPages方法中创建一个ErrorPage数组,每个ErrorPage对象包含一个HttpStatus和一个路径,表示当发生该状态码的错误时,跳转到哪个路径。
  • 最后,你需要调用registry.addErrorPages(errorPages)方法,将错误页面数组注册到错误页面注册器中。

下面是一个示例代码:

@Configuration
public class ErrorCodePageHandler implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        ErrorPage[] errorPages = new ErrorPage[2];
        // 添加错误页面进行映射
        errorPages[0] = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
        errorPages[1] = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
        registry.addErrorPages(errorPages);
    }
}

html文件需要放在静态资源目录下(如src/main/resources/static),然后在该文件夹中创建一个名为404.html的文件,写上你想要显示的内容。

这样,当发生404错误时,SpringBoot会自动将请求转发到/404.html路径,显示你自定义的错误页面。

一个最简单的404.html:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>404 Not Foundtitle>
head>
<body>
    <h1>Oops!h1>
    <p>The page you are looking for does not exist.p>
body>
html>

验证

项目结构:

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)_第5张图片

页面效果:

【SpringBoot】SpringBoot 纯后端项目如何自定义异常页面(Whitelabel Error Page)_第6张图片

当然,这个页面不是最终效果,会有专业的小姐姐提供优美的页面。

你可能感兴趣的:(Java,spring,boot,java,后端)