Spring Cloud Gateway过滤器精确控制异常返回(分析篇)

本文详细分析了Spring Cloud Gateway的错误处理流程,从ErrorWebExceptionHandler的DefaultErrorWebExceptionHandler到DefaultErrorAttributes,揭示了如何决定返回码和返回body的关键步骤。文中还介绍了响应状态码的生成逻辑,涉及ResponseStatusException和ResponseStatus注解。最后,作者分享了自己的技术背景和面试建议。
摘要由CSDN通过智能技术生成
  • 再看上述map的status值(也就是response的返回码),在DefaultErrorAttributes是如何生成的:
  1. 先看异常对象是不是ResponseStatusException类型

  2. 如果是ResponseStatusException类型,就调用异常对象的getStatus方法作为返回值

  3. 如果不是ResponseStatusException类型,再看异常类有没有ResponseStatus注解,

  4. 如果有,就取注解的code属性作为返回值

  5. 如果异常对象既不是ResponseStatusException类型,也没有ResponseStatus注解,就返回500

  • 最后看map的message字段(也就是response body的message字段),在DefaultErrorAttributes是如何生成的:
  1. 异常对象是不是BindingResult类型

  2. 如果不是BindingResult类型,就看是不是ResponseStatusException类型

  3. 如果是,就用getReason作为返回值

  4. 如果也不是ResponseStatusException类型,就看异常类有没有ResponseStatus注解,如果有就取该注解的reason属性作为返回值

  5. 如果通过注解取得的reason也无效,就返回异常的getMessage字段

  • 上述内容就是本篇精华,但是并未包含分析过程,如果您对Spring Cloud源码感兴趣,请允许欣宸陪伴您来一次短暂的源码阅读之旅

Spring Cloud Gateway错误处理源码

  • 首先要看的是配置类ErrorWebFluxAutoConfiguration.java,这里面向spring注册了两个实例,每个都非常重要,咱们先关注第一个,也就是说ErrorWebExceptionHandler的实现类是DefaultErrorWebExceptionHandler:

在这里插入图片描述

  • 处理异常时,会通过FluxOnErrorResume调用到这个Err
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值