gateway统一异常处理问题

gateway统一异常处理问题

gateway异常分为内部的异常和外部服务返回的异常信息,我重写了gateway的异常处理方法

DefaultErrorWebExceptionHandler getErrorAttributes

在这里面返回统一结果集。后端服务我也做了统一结果集处理,如果后端如果出现了异常,我也会把结果集封装好返回去,但是因为状态码不是成功状态吗,gateway的异常处理机制会把我后端返回的结果当做异常处理异常,然后给我重新处理一下,我就没法获取到后端服务返回的异常提示信息了

后端服务返回401状态的结果:

http://img1.sycdn.imooc.com//climg/607a6779092ced5f04740190.jpg

gateway返回的消息

http://img1.sycdn.imooc.com//climg/607a67be090aa6aa05250139.jpg


如何让gateway直接返回后端服务的接口呢?

后端接口的状态码必须设置成成功状态的吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
姚半仙 2021-04-17 13:54:55

每太明白“gateway直接返回后端服务的接口”是什么意思


如果需要对异常error做封装的话,可以约定一个统一的异常返回格式,按照这一节的图文教程定制delegate这个方法里的逻辑,改写返回的content里的json结构。如果你想把接口error trace一大串异常栈返回,这个没太必要,底层接口trace stack不应该抛到最外层让用户知晓

  • 提问者 qq_执着丶_0 #1

    我写错了,就是直接返回后端接口的结果response状态码401

    http://img1.sycdn.imooc.com//climg/607a6779092ced5f04740190.jpg

    gateway返回的结果

    http://img1.sycdn.imooc.com//climg/607a67be090aa6aa05250139.jpg

    上面这个图是后端接口返回的统一结果集,但是response的httpstatus码是401,所以gateway里面直接当成异常处理了,这一节的图文的方法的前提是后端服务状态码是200,才会进入到那个方法,如果后端返回的状态码不是200,直接就进入异常处理了。我想知道是不是加了gateway之后,后端接口返回的状态码是不是必须是200啊,把错误码放在结果集带到前端去啊

    2021-04-17 14:17:13
  • 姚半仙 回复 提问者 qq_执着丶_0 #2

    明白了,这个是可以做到的,可以看下统一的error封装组件内部的逻辑ErrorWebFluxAutoConfiguration,比如可以通过对这里面的DefaultErrorWebExceptionHandler进行扩展达到这个目的

    2021-04-17 17:21:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师