Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用

编辑:小优 2020-05-31 13:29:03 互联网
浏览:592次
文章简介:为什么需要全局异常处理在传统 Spring Boot 应用中, 我们 @ControllerAdvice 来处理全局的异常,进行统一包装返回例如: ③ 处应用调用数据库异常,通过 @Controlle

为什么需要全局异常处理

在传统 Spring Boot 应用中, 我们 @ControllerAdvice 来处理全局的异常,进行统一包装返回

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图1)

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图2)

例如: ③ 处应用调用数据库异常,通过 @ControllerAdvice 包装异常请求响应给客户端

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图3)

如上图: 模拟所有路由断言都不匹配 404 , 和 spring boot 默认保持一致的错误输出页面。 显然我们在网关同样配置 @ControllerAdvice 是不能解决问题,因为 spring cloud gateway 是基于 webflux 反应式编程。

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图4)

解决方法

默认处理流程

ExceptionHandlingWebHandler 作为 spring cloud gateway 最核心 WebHandler 的一部分会进行异常处理的过滤

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图5)

默认实现 DefaultErrorWebExceptionHandler

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图6)

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图7)

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图8)

重写 ErrorWebExceptionHandler

Spring,Cloud,Gateway,为什么需要全局异常处理,超级实用(图9)

总结

重写的 DefaultErrorWebExceptionHandler 优先级一定要小于内置 ResponseStatusExceptionHandler 经过它处理的获取对应错误类的 响应码

其他扩展 可以参考 SentinelBlockExceptionHandler sentinel 整合网关的处理,不过整体和默认的异常处理没有什么区别

本文相关词条概念解析:

全局

出处:清·魏源《圣武记》卷九:“额勒登保奏言:‘臣数载以来,止领一路偏师,今蒙简任经略,当通筹全局。’”。’”清·王韬《春日沪上感事》诗:“重洋门户关全局,万顷风涛接上游。”《二十年目睹之怪现状》第一○八回:“恰好有万把银子药材装到下江来的,行家知道了,便发电到沿江各埠,要扣这一笔货,这一下子可全局都被牵动了。保罗-艾斯本拥有值得开心的一切:体面的工作,妻子和两个可爱的孩子。一时的冲动颠复了他的存在,迫使他披着一个新的身份过上了想要的生活。

网友评论