分享好友 最新动态首页 最新动态分类 切换频道
Spring Cloud Gateway过滤器精确控制异常返回(实战,控制http返回码和message字段)
2024-12-26 14:38

| :-- | :-- | :-- |

Spring Cloud Gateway过滤器精确控制异常返回(实战,控制http返回码和message字段)

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

  • 这个git项目中有多个文件夹,本篇的源码在spring-cloud-tutorials文件夹下,如下图红框所示
  • spring-cloud-tutorials文件夹下有多个子工程,本篇的代码是gateway-change-body,如下图红框所示

第一种:抛出ResponseStatusException异常

  • 打开gateway-change-body工程的RequestBodyRewrite.java文件,改动如下图红框,如果请求body不含user-id参数就返回Mono.error,入参是ResponseStatusException异常,设置了返回码为400,message为一段中文描述
  • 接下来运行nacos、provider-hello工程、gateway-change-body工程

  • 用postman发请求试试,请求和响应的详情如下图

  • 从上图可见,返回码为400,和我们设定的一样,但是message却为空,这是怎么回事呢?按照咱们的设定,这里应该显示请求参数必须包含user-id字段,看来咱们遇到一只拦路虎了

小小拦路虎

  • 咱们代码中,抛异常的时候设定message内容如下图红框所示,但运行的时候返回的是空字符串,这是怎么回事呢
  • 来看DefaultErrorWebExceptionHandler.isIncludeMessage方法,看下图红框中的那个errorProperties,您会不会恍然大悟:这不就是springboot配置中的erro配置嘛
  • 修改工程的配置文件,红框内是新增的配置
  • 再用postman试试,如下图,这一次,status、message、exception、trace齐聚一堂,完全符合预期
  • 看来第一种方法是可行的:返回ResponseStatusException类型的异常

第二种:自定义异常,带ResponseStatus注解

  • 接下来试试第二种方法:通ResponseStatus注解

  • 首先新建一个异常类MyGatewayException.java,使用了ResponseStatus,在里面配置返回码和message内容,这次的返回码用的是403

package com.bolingcavalry.changebody.exception;

import org.springframework.http.HttpStatus;

import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(code = HttpStatus.FORBIDDEN, reason = “user-id字段不能为空”)

public class MyGatewayException extends Exception {

}

  • 编码完成,重启应用,然后再发一次请求,如下图,返回码和message内容都符合预期
  • 至此,两种最简单的方式都完成验证,一般情况下已经满足要求:将错误信息准确传递给调用方

留有瑕疵

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

准确的说这里又分为两部分

  1. Java刷题
  2. 算法刷题

Java刷题:此份文档详细记录了千道面试题与详解

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取
[外链图片转存中…(img-p3byR6a4-1713299011725)]

最新文章
2024年GESP12月认证C++五级真题解析
第1题 题目: 下面关于链表和数组的描述,错误的是( )。 A. 当数据数量不确定时,为了应对各种可能的情况,需要申请一个较大的数组,可能浪费空间;此时用链表比较合适,大小可动
AI论文自动生成器,AI论文自动生成器排名
这些平台利用强大的自然语言处理和机器学习技术来帮助用户快速、准确地生成文章,从而提高工作效率和内容质量。本文将推荐五个值得一试的AI人工智能原创文章写作平台。AI论文自动生成器推荐:第1个:搭画快写搭画快写是国内专业的AI原创内
9. 来俊臣围攻丘神纪时,射箭偷袭丘的神秘人,到底是谁?与来俊臣、武皇到底关系几何?背后隐藏什么样的秘密?
​​作为一部带有悬疑向的连载漫画,《大理寺日志》漫画目前更新至第235话(截止2020.4.25),作者RC前前后后埋下了无数的“坑”,而且“坑”与“坑”之间,还环环相扣。就在“挖坑”与“填坑”的反复交替中,故事草蛇灰线,伏脉千里。现在
AI智能化自动化网络拓扑解决方案
  用户对于网管自动化拓扑的需求,主要包括支持设备、自动高效地生成拓扑、体现中间件/数据库连接关系、支持特殊的拓扑操作实现等:  1.对于不同种类和不同厂商的设备,网管能通过多种协议,将其集中显示,并自动生成拓扑。  2.拓扑
7000mAh!真我刚出的这款性能机体验如何?
来源:雪球App,作者: 雷科技,(https://xueqiu.com/1641995255/316951015)我去,等等党这次又赢了。进入十二月,尽管新机发布的频率相较于前两个月慢了一些,但是重量级新品那却是一点都不少的,而且和少部分人才能承担得起的旗舰或次
2023最新手机处理器性能排名 手机CPU处理器天梯图最新
最新的手机天梯图又出来了,现在的手机技术是突飞猛进短短一个月就给大家带来了很多的新功能和新科技,下面就给你们带来了2022年11月手机cpu处理器天梯高清图,如果你一直关注手机就快来看看详细的排名吧。一、2023手机CPU性能综合排名前八
AI时刻丨当AI赋予机器人“灵魂”:2024年最值得关注的AI机器人技术盘点
记得《机器人总动员》开场的那个场景吗?孤独的小瓦力在废墟中日复一日地整理垃圾,直到遇见了伊娃,才让自己的机械生命有了情感的波澜。这个充满诗意的机器人故事,曾让无数观众为之动容。《机器人总动员》-瓦力而今天,当我们漫步在城市
2012年河南省第一批重点建设项目名单.xls
Sheet3Sheet2Sheet1主要建设文化馆、图书馆、美术馆、科技馆、演播厅等公共文化服务设施,入驻文化、科技和现代商务办公项目(不含房地产开发)。中原国际演艺中心主要建设大型演出中心、多媒体影院、购物中心等(不含房地产开发)。荥阳市
481所高校开设AI专业课 百度飞桨已培养超300万AI人才
  大模型作为人工智能发展的新方向,对人才的需求和培养带来了新挑战。4月22日,第四届中国计算机教育大会(CECC)“人工智能与大模型”论坛在厦门举办。立足前沿科技与产业发展潮头,以新时代AI人才发展为目标,教育部高等学校计算机类
相关文章
推荐文章
发表评论
0评