当前位置: 首页 > news >正文

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

文章目录

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

背景

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

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

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

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

安排

方案

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

  • 方法一:在配置文件中设置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 {@Overridepublic 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 Found</title>
</head>
<body><h1>Oops!</h1><p>The page you are looking for does not exist.</p>
</body>
</html>

验证

项目结构:

页面效果:

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

相关文章:

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

文章目录 背景安排方案步骤 验证 背景 一个短链服务&#xff0c;业务将长链接给我&#xff0c;我转换成短地址&#xff0c;用户访问短地址时&#xff0c;我再做redirect&#xff1b;没有前端&#xff0c;纯后端项目短链会有过期时间&#xff0c;过期后将返回错误信息某一天一个…...

Netty核心技术三--NIO编程

1. JAVA NIO基本介绍 Java NIO 全称 java non-blocking IO&#xff0c;是指 JDK 提供的新API。从 JDK1.4 开始&#xff0c;Java 提供了一系列改进的输入/输出的新特性&#xff0c;被统称为 NIO(即 New IO)&#xff0c;是同步非阻塞的 NIO 相关类都被放在 java.nio 包及子包下&…...

机器人的运动范围:DFS

Problem: 剑指 Offer 13. 机器人的运动范围 文章目录 思路解题方法复杂度Code 思路 首先定义好地图&#xff0c;上下左右四个方向也就是{{1,0},{0,1},{-1,0},{0,-1}}&#xff0c;然后我们另外定义一个方法来判断题目要求的下标位数和是否大于k&#xff0c; boolean check(int x…...

Rshiny编写ui中具有web依赖项的控件{该问题的具体阐述请看引言}

Rshiny编写ui中具有web依赖项的控件{该问题的具体阐述请看引言} 引言conditionalPanel函数update*函数系列总结引言 问题说明:在汇报的过程中我们想添加具有web依赖项的控件,比如ui中有两个控件:第一个控件标签为m,其取值为:1、2;第二个控件标签为m0,m0的取值依赖于m,即…...

1700页,卷S人的 软件测试《八股文》PDF手册,涨薪跳槽拿高薪就靠它了

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…...

bundle的常用命令

Bundle 是 Ruby 的一个包管理器&#xff0c;用于管理 Ruby 应用程序所需的依赖项。下面是一些常用的 Bundle 命令&#xff1a; 以下是常用的 Bundle 命令&#xff1a; 1. bundle install&#xff1a;安装所有在 Gemfile 中列出的 gem 包及其依赖项。 2. bundle update&#x…...

一、数据字典介绍

文章目录 一、数据字典介绍1、页面效果2、表设计3、数据分析4、根据页面效果分析数据接口 一、数据字典介绍 何为数据字典&#xff1f;数据字典就是管理系统常用的分类数据或者一些固定数据&#xff0c;例如&#xff1a;省市区三级联动数据、民族数据、行业数据、学历数据等&a…...

常见的SQL优化

索引优化&#xff1a;通过创建合适的索引来加快查询速度。查询优化&#xff1a;使用合适的查询语句和查询条件&#xff0c;避免全表扫描。比如&#xff1a; 避免使用SELECT *避免使用子查询避免使用OR操作符避免使用LIKE操作符使用LIMIT限制结果集大小优化查询语句的顺序 数据库…...

Sonic新生态Sonic IDE体验

背景 Sonic:免费开源的云真机测试平台&#xff0c;用心打造更好的使用体验。 之前在做APP的日常测试和UI自动化的时候,一直在使用Sonic 没有切换到平台上进行自动化测试的原因是由于现有脚本框架已经成熟,并且有很多自定义的拓展,所以Sonic的更多是一个设备管理员的角色 在Soni…...

[VRTK4.0]安装VRTKv4Tilia软件包导入程序

学习目标&#xff1a; 演示如何从Unitv资源商店安装VRTKv4Tilia包导入器,以轻松访问VRTKv4Tilia包&#xff0c;这些包为构建XR体验提供了各种有用的功能. 简述&#xff1a; 推荐使用2022.2.11F1以上版本来进行VRTK使用&#xff0c;我们可以从Unity资产商店导入Tilia包管理器&am…...

SpringBoot开发实用篇2---与数据层技术有关的替换和整合

四、数据层解决方案 1.SQL 现有数据层解决方案技术选型&#xff1a;DruidMyBatis-plusMySQL 数据源&#xff1a;DruidDataSource 持久化技术&#xff1a;MyBatis-plus/MyBatis 数据库&#xff1a;MySql 内置数据源&#xff1a; SpringBoot提供了3种内嵌的数据源对象供开发者选…...

科普ChatGPT

ChatGPT是什么? ChatGPT是一款基于人工智能技术的聊天机器人&#xff0c;可以进行自然语言的交互。它是由OpenAI公司开发的&#xff0c;其名称中的GPT是“Generative Pre-trained Transformer”的缩写&#xff0c;即基于预训练的转换器。ChatGPT使用预训练的神经网络模型来理…...

Spring MVC的核心类和注解

DispatcherServlet DispatcherServlet作用 DispatcherServlet是Spring MVC的核心类&#xff0c;也是Spring MVC的流程控制中心&#xff0c;也称为Spring MVC的前端控制器&#xff0c;它可以拦截客户端的请求。拦截客户端请求之后&#xff0c;DispatcherServlet会根据具体规则…...

Java 创建一个大文件

有时候&#xff0c;我们在对文件进行测试的时候&#xff0c;可能需要创建一个临时的大文件。 那么问题来了&#xff0c;在 Java 中如何创建大文件呢&#xff1f; 问题和解决 有些人想到的办法就是定义一个随机的字符串&#xff0c;然后重复很多次&#xff0c;然后将这个字符…...

董小姐大意了

阅读本文大概需要 1.17 分钟。 董小姐跟孟羽童的事情&#xff0c;想必大家或多或少都听说了。 事情的经过我就不多做赘述了&#xff0c;实际上并不复杂。 董小姐不是善茬&#xff0c;孟年轻做不来事&#xff0c;不能给格力带来价值&#xff0c;那可以归为双方没缘分&#xff0c…...

Java高并发核心编程—内置锁原理篇

注&#xff1a;本笔记是阅读《Java高并发核心编程卷2》整理的笔记&#xff01; 导致并发修改的原因 基本概念 synchronized 关键字 方法声明synchronized synchronized 同步块 消费者生产者问题 Java对象结构与内置锁 四种内置锁 偏向锁原理 偏向锁的撤销 偏向锁的膨胀 全局安全…...

opencv文字识别

OpenCV&#xff08;开源计算机视觉库&#xff09;是一个用于实现计算机视觉和机器学习的开源库。它包含了许多预先训练的模型和算法&#xff0c;可以帮助开发者快速实现图像处理、对象检测和识别等功能。在文字识别方面&#xff0c;OpenCV也有一些实用的工具和方法。 要在OpenC…...

bool、python集合

目录 1、使用bool判断某一数据类型是否为空 2、Python集合&#xff08;数组&#xff09; 1、列表 2、元组 3、集合 4、字典 1、使用bool判断某一数据类型是否为空 如果有某种内容&#xff0c;则几乎所有值都将评估为 True。 除空字符串外&#xff0c;任何字符串均为 Tr…...

从零开始学架构——可扩展架构模式

可扩展架构模式的基本思想和模式 软件系统与硬件和建筑系统最大的差异在于软件是可扩展的&#xff0c;一个硬件生产出来后就不会再进行改变、一个建筑完工后也不会再改变其整体结构 例如&#xff0c;一颗 CPU 生产出来后装到一台 PC 机上&#xff0c;不会再返回工厂进行加工以…...

Day03 01-MySQL数据完整性详解

文章目录 第七章 数据完整性7.1 完整性约束7.2 实体完整性7.2.1 唯一约束7.2.2 主键约束7.2.3 自增约束 7.3 域完整性7.3.1 非空约束7.3.2 默认值约束7.3.3 检查约束 7.4 引用完整性 第七章 数据完整性 7.1 完整性约束 我们已经知道了如何创建数据库、如何创建表、如何在表中…...

GraphPad Prism 介绍是干啥的?安装教程

安装教程 安教和安包https://qqstone.top/blog/graphpad-prism-10.1.2 一、GraphPad Prism 是什么、用来干什么 GraphPad Prism 是专门面向生物医学、药学、生命科学、基础医学的科研统计与绘图软件&#xff0c;主打不用编程、操作简单、结果规范&#xff0c;是发表 SCI 论文…...

轴向磁通电机仿真避坑指南:ANSYS Maxwell 3D建模时气隙与对称性的7个关键设置

轴向磁通电机3D仿真进阶指南&#xff1a;从参数校准到高效求解的实战技巧 轴向磁通电机因其紧凑结构和高效能特性&#xff0c;正在新能源车、航空航天等领域获得广泛应用。但不同于传统径向电机&#xff0c;其三维电磁场分布的复杂性使得仿真过程常成为工程师的"噩梦"…...

Kubernetes集群的自动化运维实践

Kubernetes集群的自动化运维实践 &#x1f525; 硬核开场 各位技术老铁&#xff0c;今天咱们聊聊Kubernetes集群的自动化运维实践。别跟我扯那些理论&#xff0c;直接上干货&#xff01;在云原生时代&#xff0c;Kubernetes已经成为容器编排的事实标准&#xff0c;但随着集群规…...

Windows更新修复工具深度技术指南:从问题诊断到系统优化

Windows更新修复工具深度技术指南&#xff1a;从问题诊断到系统优化 【免费下载链接】Reset-Windows-Update-Tool Troubleshooting Tool with Windows Updates (Developed in Dev-C). 项目地址: https://gitcode.com/gh_mirrors/re/Reset-Windows-Update-Tool Windows更…...

别再暴力搜索了!用动态规划优化旅行商问题,C++代码效率提升实战

暴力搜索 vs 动态规划&#xff1a;旅行商问题的C效率革命 当城市数量超过10个时&#xff0c;传统的暴力搜索方法在解决旅行商问题(TSP)时就像试图用算盘计算宇宙中的原子数量——理论上可行&#xff0c;实际上完全不切实际。作为一名长期在算法竞赛中摸爬滚打的选手&#xff0c…...

Tun模式浏览器无法使用网络

环境Win11&#xff0c;v2软件表现情况打开Tun模式后发现无法连接网络&#xff0c;v2的dns配置保持默认。本文方法适用于打开Tun模式时&#xff0c;虚拟网卡可以正常创建&#xff0c;但是仍然无法联网的情况。在开始里搜索查看网络连接&#xff0c;这里是可以正常创建的。解决方…...

2026届学术党必备的AI写作工具推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 大语言模型DeepSeek&#xff0c;于论文写作中能予以多维度辅助。在文献检索阶段&#xff0c;…...

旺店通与轻易云集成平台的无缝数据对接方案

数据源系统&#xff1a;旺店通企业奇门旺店通企业奇门是慧策旗下核心的智能零售解决方案&#xff0c;提供从订单管理到仓储物流的全链路服务。其特点包括&#xff1a;一体化智能零售平台&#xff0c;覆盖电商经营全流程打破数据孤岛&#xff0c;实现跨系统数据互通AI驱动的智能…...

柔性车间动态重调度实战:机器故障下的遗传算法优化策略

1. 柔性车间调度与机器故障的实战挑战 想象一下你正在管理一个汽车零部件生产车间&#xff0c;突然一台关键数控机床在下午3点15分突发故障&#xff0c;维修需要4小时。此时有10个不同型号的曲轴正在排队等待加工&#xff0c;每道工序都有多个备选设备但加工效率各不相同。这就…...

Python IDE 横向对比:VSCode、Spyder、PyCharm 与 Jupyter Notebook 的实战选择指南

1. 为什么Python开发者需要纠结IDE选择&#xff1f; 刚入门Python时&#xff0c;我也觉得用记事本写代码没什么问题。直到第一次尝试调试一个爬虫脚本&#xff0c;在密密麻麻的打印语句中找bug时&#xff0c;才意识到好工具的重要性。Python作为多范式语言&#xff0c;从数据清…...