Spring Boot下web开发 异常信息显示页面处理及原理

Spring Boot 开发的web应用,默认情况下如果发生异常将会有一个简易的页面显示错误信息,这个显示页面比较简陋,那么我们如何定制错误信息显示页面呢?

以下的例子模板引擎都是选择的freemarker。

简单的说:Spring Boot 内置了一个controller,类名:BasicErrorController,默认注册的url为 /error。

因此

1、如果我们想简单定制错误页面,只需在templates下 建立一个名为 error.ftl 文件。

2、如果我们想根据不同的HTTP错误状态码显示不同的错误页面,只需在templates下 建立目录error,然后在其下建立对应的文件

      如 404,就建立404.ftl  500 就建立500.ftl 

如果想对同一系列状态码使用相同的页面 如 5xx  就建立 5xx.ftl

 

其中原理,只需查看 BasicErrorController 源码即可。简单的说,它是根据Http错误状态码和模板引擎类型进行查找的,

 以404为例,查找的顺序如下:

'/<templates>/error/404.<ext>'
'/<static>/error/404.html'
'/<templates>/error/4xx.<ext>'
'/<static>/error/4xx.html'

如果都没有,就使用Spring Boot默认提供的,即在 ErrorMvcAutoConfiguration 中配置的 defaultErrorView

与下图对应

那么,为什么BasicErrorController 中设置error视图与这个名叫error的bean 有关呢?

这是因为spring mvc 的视图解析器(根据一个视图名称解析找到对应的View)中有一个叫BeanNameViewResolver,结合这些信息,可以知道它最终到的View实现是SpelView 。

(到这里,我们也就明白了Spring boot 默认错误页上的内容为什么是那样的了)

Spring mvc 使用View的render进行内容渲染输出。我们可以在SpelView的render方法中打一个断点,看看调用栈。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值