SpringBoot如何处理自定义异常(都是套路!!!)

本文介绍了在SpringBoot项目中如何处理自定义异常,包括静态异常页面和动态异常页面的创建,以及自定义异常数据和视图。通过分析源码,解释了异常页面的查找规则和优先级:精确匹配优于模糊匹配,动态页面优于静态页面。最后,文章提供了自定义异常数据和视图的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

在 SpringBoot 项目中,对于异常的统一处理,可以采用 Spring 中@ControllerAdvice注解标注的类来统一进行处理,也可以自定义异常处理的解决方案。在 SpringBoot 中,对异常的处理存在一些默认的策略,下面我们就分别来看一下。

默认情况下,SpringBoot项目异常页面如下:
在这里插入图片描述
其实通过这个默认的提示页面,能够看出来,之所以能够看到这个默认的异常提示页面,是因为开发者没有提供明确映射路径/error,如果开发者提供了这个路径,则此页面则不会显示,不过在 SpringBoot 项目中提供/error路径实属下下策,为什么这么说?因为 SpringBoot 本身在处理异常时,即当所有条件都不满足时,才会去寻找/error路径,为何要这么复杂,这不是降低效率吗?

现在,先来看看在 SpringBoot 中如何自定义异常页面,就页面属性而言,可以分为两类,一类是静态异常页面,另一类是动态异常页面

二、静态异常页面

常见的异常可以分为两个派系,分别是 400 系列和 500 系列。自定义异常页面也可以分为两类,一类是以 HTTP 响应码来命名的,例如:402.html、404.html、500.html 等等,另一类则是直接定义一个 4xx.html,状态响应码在 400-499 范围内都显示 4xx.html 异常页面,5xx.html 包含 500-599 范围内的状态响应码都显示 5xx.html 异常页面。

默认情况下,是在classpath:/static/error/下定义异常页面,如下:
在这里插入图片描述
划重点啦

如果项目中抛出状态码为 500 的错误,则自动展示 500.html 异常页面,若抛出的状态码为 404,则自动展示 404.html 异常页面。如果项目中存在 500.html 页面,同时也存在 5xx.html 页面,若此时发生 500 错误,则优先展示 500.html 页面。这里有个优先级原则:精确 > 模糊

三、动态异常页面

其实动态异常页面定义与静态异常页面的方式相同,可以采用的模板技术包含:jsp、freemarker、thymeleaf。动态异常页面命名可以是404、500等等精确的状态码命名方式,一般情况下,由于动态异常页面可以直接展示异常详细的信息,所以没有必要挨个枚举了,这里就直接定义为4xx.html、5xx.html。(这里采用的是thymeleaf)

动态异常页面定义如下:
在这里插入图片描述
【5xx.html】

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>templates-5xx</h1>
<tr>
    <td>path</td>
    <td th:text="${path}"></td>
</tr>
<tr>
    <td>timestamp</td>
    <td th:text="${timestamp}"></td>
</tr>
<tr>
    <td>message
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值