Spring boot 处理 error 的套路

参考官方文档:


Spring boot 处理 error 的基本流程:

Controller -> 发生错误 -> BasicErrorController -> 根据 @RequestMapping(produces) 判断调用 errorHtml 或者 error 方法

然后:

errorHtml -> getErrorAttributes -> ErrorViewResolver -> 错误显示页面

error -> getErrorAttributes -> @ResponseBody (直接返回JSON)

如果想要定制一些东西,按照官方文档的建议可以:

1.继承 BasicErrorController  扩展处理一个新的 content type

2.自定义 ErrorAttributes 获得自己想要的结果集

3.实现 ErrorViewResolver 接口,自定义错误显示视图

Spring boot 默认使用 DefaultErrorViewResolver 作为 ErrorViewResolver  的实现,并配置了 4xx, 5xx 视图

源代码;


一般的,并不需要扩展上面的内容,通常情况下,下面两种方式可以应对大部分场景

1.捕获异常:

使用 @ControllerAdvice 与 @ExceptionHandler 捕获异常并处理(返回自定义json对象或是页面视图,将替代 ErrorAttributes、ErrorViewResolver)

注意:如 404 等是通过 Servlet (DispatcherServlet.noHandlerFound) 的处理并返回 response ( response.sendError) ,并未到达 Controller 层,所以并不能捕获到。

2.直接提供相应错误显示视图,有两种方式:

静态页面

创建 error 文件夹,页面命名必须是 status code 或 4xx,位置在 Spring boot 静态资源路径下,如:


模板页面

使用模板页面,默认只需将 error 文件夹放入 templates 下即可

但需要注意如果 prefix 与 suffix 配置 (freemarker),则存放目录与文件后缀需要作相应的改变

3.覆盖Spring boot 默认的 error 页面

将命名为 error.ftl (注意匹配 prefix、suffix)的页面放入 templates 下即可

注意:不要放入 error 文件夹下,这点与 4xx 页面不同

默认全局的 error 页面将显示所有状态下的错误信息,如果放入 4xx 等页面后,将优先匹配 4xx 页面 (根据 status code )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值