专栏名称: 码农小胖哥
技术公众号:码农小胖哥
51好读  ›  专栏  ›  码农小胖哥

不是所有的Spring Boot异常都能被统一异常处理 | Java Debug 笔记

码农小胖哥  · 掘金  ·  · 2021-05-16 22:52

正文

阅读 156

不是所有的Spring Boot异常都能被统一异常处理 | Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接

通常我们在Spring Boot中设置的统一异常处理( @RestControllerAdvice 配合 @ExceptionHandler 实现)只能处理Controller抛出的异常。有些请求还没到Controller就出异常了,而这些异常不能被统一异常捕获,例如Servlet容器的某些异常。今天我在项目开发中就遇到了一个,这让我很不爽,因为它返回的错误信息格式不能统一处理,我决定找个方案解决这个问题。

ErrorPageFilter

Whitelabel Error Page

这类图相信大家没少见,Spring Boot 只要出错,体现在页面上的就是这个。如果你用Postman之类的测试出了异常则是:

{
  "timestamp": "2021-04-29T22:45:33.231+0000",
  "status": 500,
  "message": "Internal Server Error",
  "path": "foo/bar"
}
复制代码

这个是怎么实现的呢?Spring Boot在启动时会注册一个 ErrorPageFilter ,当Servlet发生异常时,该过滤器就会拦截处理,将异常根据不同的策略进行处理: 当异常已经在处理的话直接处理,否则转发给对应的错误页面 。有兴趣的可以去看下源码,逻辑不复杂,这里就不贴了。







请到「今天看啥」查看全文