SpringCloudGateway过滤器控制异常返回(返回码和message字段)
欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览前文《Spring Cloud Gateway过滤器精确控制异常返回(分析篇)》咱们阅读源码,了解到Spring Cloud Gateway是如何处理全局异常信息的,学了那么多理论,不免手痒想实战验证学习效果,今天咱们就来写代码,最终目标是改写下图两个红框中的内容:
为了简单起见,本篇不再新增maven子工程,而是基于前文创建的子工程 gateway-change-body ,在这里面继续写代码;源码下载本篇实战中的完整源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):
这个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内容都符合预期
至此,两种最简单的方式都完成验证,一般情况下已经满足要求:将错误信息准确传递给调用方 留有瑕疵聪明的您应该已发现上述两种方案有瑕疵:返回body的格式和字段都是固定的,如果项目中对返回body的内容有严格要求,例如只允许code、message、data三个字段,其余字段一律不能返回,此时又该怎么办呢?似乎需要一种方法,让咱们可以随心所欲的设置body内容,篇幅所限,这种终极的解决方式就留在下一篇吧,敬请期待,欣宸原创,必不辜负您…欢迎关注头条号:程序员欣宸学习路上,你不孤单,欣宸原创一路相伴...
山西省第八次旅发大会邀您相约关公故里共襄文旅融合以相约关公故里,共襄文旅融合为主题的2022年山西省第八次旅游发展大会(以下简称旅发大会)暨第33届关公文化旅游节将于9月2123日在运城市盛大启幕,这是一场具有运城特色高质量高水
西街观察一周年,环球影城的变数与常数9月20日,北京环球度假区开业一周年。自园区开门迎客以来,累计超过1380万人次的游客在这里观赏了6。8万场以上的各类表演演出,总时长达1。4万小时。疫情反复干扰,让过去一年的环球
朝鲜街头美女很多,朝鲜男人烟酒不离手很多去过朝鲜旅游的人都说,朝鲜的美女很多。为了求证这个问题,我前不久也去了一趟朝鲜。首先我想说的是,朝鲜的美女确实不少。在朝鲜,接待外国游客的妹子,不管是空姐,还是列车上的乘务员,
奋进新征程建功新时代非凡十年美丽凤城沐风起舞运城在元代有凤凰城之称,城市中心南风广场的火凤凰雕塑也因此而来,凤城之别称延续至今。中华民族的母亲河黄河一路湍流冲出晋陕大峡谷后突然扭头,把运城深情揽在她美丽的臂弯里,把人类的始祖
文旅花开满城芳桂阳县文旅产业发展综述李江青李卓林肖舟颜石敦在福城郴州,有一个历史悠久文化厚重资源丰富美丽富饶的地方,她就是桂阳。邂逅桂阳,一步一景,一幅文旅融合的山水画卷徐徐铺开,文旅产业千帆竞
纵贯9省区13日4066公里自驾游重走万里茶道中国段(路书及地图)编辑何天天,摄影冯浪访古巡幽品茶论道。万里茶道纵贯中国南北,一条路看遍茶道沿线文化遗产,也纵览南北不同的风景民情。感知历史会游中国,万里茶道也是一条非常适合穿越中国南北的自驾游路线
数十年我养成了一种习惯走到那里了解那里宣传那里我的坚持我的家乡记忆我的坚持邓茂良我到攀枝花已有几年时间了。在攀枝花的日子,我每天独自登山或徒步,足迹几乎遍布整个攀枝花城区和附近大大小小的山顶。我徒步和登山的时间每天大都在4小时以上,有
律师王庭伟的门头沟一日春风永拂面清新恒相伴作者郭奕晨张冲所有随风而逝的都属于昨天,所有历经风雨留下的才是面向未来受黄秘书长之邀,不是诗人的律师王庭伟赴马栏村参加红色马栏首届铭记九一八诗歌朗诵会。按照事前的精心计划,心想事成
独行泰山之北大梁西大梁上上周五的清晨,风有些诡异,不知东西南北,间歇性胡乱的刮着,没有方向,凉凉的带着寒意,吹得鸡皮疙瘩都起来了,稀疏的落叶夹杂着少量沙尘打着转,天上难得湛蓝清澈,晴空万里,没有一抹云彩
成为敦煌讲解员的四十天修炼编者按敦煌莫高窟是很多人终其一生想要朝圣的地方。虽然出于保护需要,莫高窟开放洞窟数量有限,但绝世仅有的奇观总让人流连。而如果你想要读懂它,影像和文字的预习是实地游必需的前奏。作者蒋
读史察今腾冲人心目中的坐标读史察今讲讲腾冲故事(十三)大蒿坪腾冲人心目中的坐标首先感谢我的同事马瑞根先生的一路陪伴,并感谢我腾冲回族亲家明景东先生提供的线索。前次故事讲到腾冲出关的古桥与古道。今天还是讲与出