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、网络编程-获取ip-解析ip
2、Linux下进行硬盘挂载、分区、删除分区,格式化,卸载方法
3、三种经典iPhone上网络抓包方法详解(抓取3G网络包)
4、dependencies、devDependencies、webpack打包 的区别与联系
5、JavaScript使用技巧精萃


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号