Spring Boot中自定义异常

在 Spring Boot 项目中 ,我们可以异常进行统一的处理,使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案。Spring Boot 中,对异常的处理有一些默认的策略
我们定义一个controller类

package com.zhouym.customexception;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 〈〉
 *
 * @author zhouym
 * @create 2019/8/8
 * @since 1.0.0
 */
@RestController
public class ExceptionController {
   

    @GetMapping("/test")
    public void query(){
   
        int num = 1 / 0;
    }
}

运行启动类,看看页面结果
在这里插入图片描述
页面很明确的提示我们,是因为我们没有提供一个/error路径,如果我们提供了,就不会展示出这个页面了,下面我们就来提供一个/error路径下的页面
在这里插入图片描述
在运行启动类看看页面结果
在这里插入图片描述
直接找的是我们提供的error目录下的文件了,但是呢提供/error路径不是一个明智的办法,因为Spring Boot 本身在处理异常时,也就是当所有条件都不满足时,才会去找 /error 路径,下面我们就来看看实现自定义的error页面,主要分为静态页面和动态页面,把页面放在resources目录下的static目录下,就是静态页面,利用freemarker和thymeleaf模板,放在templates目录下也就是动态页面了

静态异常页面

自定义静态异常页面又分为两种,一种是根据HTTP响应码来命名页面文件,例如:404.html,505.html等,还有一种是直接定义成4xx.html,表示400-499状态的都显示这个页面,5xx.html表示500-599状态的都显示这个页面。
静态异常页面默认是在classpath:/static/error下面:
在这里插入图片描述
启动项目后,如果项目抛出 500 请求错误,就会自动展示 500.html 这个页面,发生 404 就会展示 404.html 页面。如果异常展示页面既存在 5xx.html,也存在 500.html ,此时,发生500异常时,优先展示 500.html 页面。
在这里插入图片描述
在这里插入图片描述

动态异常页面

动态的异常页面定义方式和静态的基本 一致,可以采用的页面模板有 jsp、freemarker、thymeleaf。动态异常页面,也支持 404.html 或者 4xx.html ,但是一般来说,由于动态异常页面可以直接展示异常详细信息,所以就没有必要挨个枚举错误了 ,直接定义 4xx.html(这里使用thymeleaf模板)或者 5xx.html 即可。

注意,动态页面模板,不需要开发者自己去定义控制器,直接定义异常页面即可 ,Spring Boot 中自带的异常处理器会自动查找到异常页面。

在这里插入图片描述
页面内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>templates---500</h1>
</body>
</html>

在这里插入图片描述
如果动态页面和静态页面同时定义了异常处理页面,例如 classpath:/static/error/404.html 和 classpath:/templates/error/404.html 同时存在时,默认使用动态页面。即完整的错误页面查找方式应该是这样:

发生了500错误–>查找动态 500.html 页面–>查找静态 500.html –> 查找动态 5xx.html–>查找静态 5xx.html。
以上查找方式,我们通过源码来分析下:
找到ErrorMvcAutoConfiguration这个类,异常信息是通过这个类进行加载和解析的
在这里插入图片描述
找到这个类中默认的错误视图解析器
在这里插入图片描述
点进去,发现定义一个static静态代码块,服务一启动就会优先加载这里面的东西,这里面主要将4xx,5xx数据放到枚举变量中,然后将再把信息放到Map集合常量中
在这里插入图片描述
找到这类中的关键方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值