我想使用通用方式来管理 5xx 错误代码,让我们具体说一下当整个 spring 应用程序中的数据库关闭时的情况。我想要一个漂亮的错误 json 而不是堆栈跟踪。
对于控制器,我有一个 @ControllerAdvice
类用于不同的异常,这也捕获了数据库在请求中间停止的情况。但这并不是全部。 I also happen to have a custom CorsFilter
extending OncePerRequestFilter
and there when i call doFilter
i get the CannotGetJdbcConnectionException
and it will not be managed由 @ControllerAdvice
。我在网上阅读了几件事,这让我更加困惑。
所以我有很多问题:
- 我需要实现自定义过滤器吗?我找到了
ExceptionTranslationFilter
但这只处理AuthenticationException
或AccessDeniedException
。 - 我想实现自己的
HandlerExceptionResolver
,但这让我怀疑,我没有任何自定义异常需要管理,必须有比这更明显的方法。我还尝试添加一个 try/catch 并调用HandlerExceptionResolver
的实现(应该足够好,我的例外没什么特别的)但这没有在响应中返回任何内容,我得到一个状态 200 和一个空的身体。
有什么好的方法可以解决这个问题吗?谢谢
原文由 kopelitsa 发布,翻译遵循 CC BY-SA 4.0 许可协议
所以这就是我所做的:
我在 这里 阅读了有关过滤器的基础知识,发现我需要创建一个自定义过滤器,该过滤器将位于过滤器链中的第一个,并且将有一个 try catch 来捕获可能在那里发生的所有运行时异常。然后我需要手动创建 json 并将其放入响应中。
所以这是我的自定义过滤器:
然后我将它添加到
CorsFilter
之前的 web.xml 中。它有效!