Springboot 自定义项目异常,错误页面错误数据

55 篇文章 0 订阅
19 篇文章 0 订阅

一个系统中避免不了一个就是错误信息,所以我们有必要自己定义灵活的友好的错误信息,在此之前我们有必要了解一下springboot 的错误处理机制。

首先我们知道在springboot 应用中我们@SpringBootApplication 注解,其中最主要的就是我们自动配置类,它启动了一个选择器

AutoConfigurationImportSelector这个类中selectImports 方法是加载我们的自动配置信息,有了这些信心我们就可以根据条件加载我们默认的类信息,其中getAutoConfigurationEntry方法中加载我们META-INF/spring.factories中的自动配置类中找到EnableAutoConfiguration对应的配置类,然后加载这些类到容器中,

在这个里边我们找到关于错误处理 相关配置ErrorMvcAutoConfiguration,那么我们查看此类,

可以在上述关键代码中看到,此配置优先于mvc 加载,同时在容器中创建DefaultErrorAttributes(springboot 默认异常信息属性) , BasicErrorController (异常处理控制器),ErrorPageCustomizer (异常处理页面跳转)

上面几张图就是默认处理的关键代码逻辑,大致就是我们平时遇到的如果我们没有处理则错误时如果是页面调用则返回默认空白页信息,如果为客户端则返回json数据,错误属性也是默认的,

看到这里是不是已经非常清楚springboot 的默认错误了,明白了为什么遇到错误了页面会返回这样的结果。那么具体怎么做的呢?如果想要配置我们自己定义的错误页面及信息怎么办呢?

从这个关键代码中可以知道我们错误页面如果是有模板解析器时,在默认模板解析器/error 找错误页面,错误页面定义规则4xx ,5xx +html 的这种规则,所以我们首先可以简单编写

此时我们发现已经可以访问我们自己定义的错误页面了,那么现在这些我们只能得到默认的错误信息,那么怎么得到一些我们自己描述的异常呢?

1.比如我定义个用户异常类

2.我们要考虑这个异常类怎么被我们应用获取呢?此时我们可以使用@ControllerAdvice 来拦截我们的此种异常

这里有个关键的点就是我为什么知道要在request设置状态code ,在上述源码分析中错误机制会在我们/error请求中根据我们errorcode(也就是请求状态吗)进行页面拼装返回,那么key javax.servlet.error.status_code 是怎么来的呢?

是否明白我们默认的状态吗就是从这句代码中获取的,此时我们自己设置就ok了,这样我们设置的就可以生效了,那么我们刚才拦截的异常怎么让它输出显示呢?

此时我们看到是从上述代码中获取我们的异常信息,这是一个扩展点,所有的错误信息都实现了ErrorAttributes接口,那么我们知道了这些重写一个我们异常信息组件:

这样我们拦截的异常信息及默认的异常信息就都可以获取到了,到这里我们的统一异常处理就可以灵活实现了。这里我从源码中来一步一步的了解及怎么处理异常。如果对你有用就点个赞。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值