首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

本篇概览 前文《Spring Cloud Gateway过滤器精确控制异常返回(分析篇)》咱们阅读源码,了解到Spring Cloud Gateway是如何处理全局异常信息的,学了那么多理论,不免手痒想实战验证学习效果...文件夹下,如下图红框所示: spring-cloud-tutorials文件夹下有多个子工程,本篇的代码是gateway-change-body,如下图红框所示: 第一种:抛出ResponseStatusException...按照咱们的设定,这里应该显示请求参数必须包含user-id字段,看来咱们遇到一只拦路虎了 小小拦路虎 咱们代码中,抛异常的时候设定message内容如下图红框所示,但运行的时候返回的是空字符串,这是怎么回事呢...,使用了ResponseStatus,在里面配置返回码和message内容,这次的返回码用的是403: package com.bolingcavalry.changebody.exception;...message内容都符合预期: 至此,两种最简单的方式都完成验证,一般情况下已经满足要求:将错误信息准确传递给调用方 留有瑕疵 聪明的您应该已发现上述两种方案有瑕疵:返回body的格式和字段都是固定的

52830

Spring Cloud Gateway-自定义异常处理

,匹配成功之后使用该指定的异常处理器返回结果进行Response的渲染,如果找不到默认的异常处理器则用默认的进行兜底(个人认为,Spring在很多功能设计的时候都有这种“有则使用自定义,无则使用默认提供...SpringMVC中提供的自定义异常体系在Spring-WebFlux中并不适用,其实原因很简单,两者底层的运行容器并不相同。...WebExceptionHandler是Spring-WebFlux的异常处理器顶层接口,因此追溯到子类可以追踪到DefaultErrorWebExceptionHandler是Spring Cloud...这里直接把异常信息封装成下面格式的Response返回,最后需要渲染成JSON格式: { "code": 200, "message": "描述信息", "path" : "请求路径",...":"GET"} 测试场景二:下游服务正常启动和调用,网关自身抛出异常。

3.8K21
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    springcloud微服务实战:服务网关,Gateway

    Gateway是由Spring Cloud官方开发的一套基于WebFlux实现的网关组件,它的出现是为了替代Zuul。...Spring Cloud Gateway依赖WebFlux,而WebFlux通过Mono对象返回数据,因此上述过滤器也返回了Mono对象。...我们注意到,filter方法返回的是 Mono,读者可以将Void类理解为同Java的void关键字一样的功能,它其实就是void关键字的包装类,同int和 Integer的区别一样。...将地址加上 token参数后,将会得到如图9-1所示的结果。 请求失败处理 如果要调用的服务出现异常或者宕机了,那么Gateway请求失败,必然会返回错误。...这种500 错误对用户是不友好的,需要对服务网关进行统一的异常处理并给客户端返回统一的JSON数据,让客户端具有友好的体验,具体步骤如下。

    72720

    WebFlux 全局异常处理实战

    WebFlux REST 全局异常处理实战 小结 摘录:只有不断培养好习惯,同时不断打破坏习惯,我们的行为举止才能够自始至终都是正确的。 一、为什么要全局异常处理?...挺多人咨询的,Spring Boot MVC 异常处理用切面 @RestControllerAdvice 注解去实现去全局异常处理。那 WebFlux 如何处理异常?如何实现统一错误码异常处理?...从请求中拿出 city 的值,如果没有的话则抛出对应的异常。GlobalException 是封装的全局异常。...然后判断是否是 GlobalException,如果是 CityHandler 服务处理类抛出的 GlobalException,则返回对应的异常的信息。...本文重点还是有别于 Spring Boot 传统 MVC 模式统一异常处理,实战了 WebFlux 全局异常处理机制。

    2.5K10

    艿艿连肝了几个周末,写了一篇贼长的 Spring 响应式 Web 框架 WebFlux!市面第二完整~

    return CommonResult.success(user); } } API 接口虽然比较多,但是我们可以先根据返回结果的类型,分成 Flux 和 Mono 两类。...一般来说,常用的方案选择,有两种: 封装统一的业务异常类 ServiceException ,里面有错误码和错误提示,然后进行 throws 抛出。...当调用别的方法时,如果别人返回的是 CommonResult 对象,还需要不断的进行判断,写起来挺麻烦的。 所以,后来我们采用了抛出业务异常 ServiceException 的方式。...方法,拦截处理 ServiceException 业务异常,直接使用该异常的 code + message 属性,构建出 CommonResult 对象返回。...请求结果如下: { "code": 2001001000, "message": "服务端发生异常", "data": null } 在 #exception02() 方法,抛出 ServiceException

    6K14

    【翻译】Reactor 第七篇 Spring WebFlux 怎么进行异常处理

    1 概览 在本教程中,我们将通过一个实际示例了解Spring WebFlux项目中处理错误的各种策略。 我们还将指出使用一种策略比另一种策略更有利的地方,并在最后提供完整源代码的链接。...2 开始示例代码 maven 设置和之前介绍 Spring WebFlux 的文章一样, 对于我们的示例,我们将使用一个 RESTful 端点,它将用户名作为查询参数并返回“Hello username...username=Tonni”,类似请求,我们总是能正常返回。 然而,如果我们的请求不带 username 参数,我们的请求就会抛出异常了。...下面,我们来看看 Spring WebFlux 在哪里以及怎么重组代码来处理我们的异常。 3 方法级别处理异常 Mono 和 Flux API 中内置了两个关键运算符来处理方法级别的错误。...总结 在本文中,我们研究了在 Spring WebFlux 项目中处理异常的集中策略,并指出使用一个策略优于其他策略的地方。

    1.7K10

    优雅的参数校验与全局异常-代码规范的天生落地

    结合上图结果和代码我们可以观察到,Spring自带的基础返回体没有将我们想要的message显示出来,仅仅是在控制台有日志打印,只有显示指定@NotNull、@NotBlank、@NotEmpty等非空注解时...提示 最新的Spring6、SpringBoot3中,已提供了org.springframework.http.ProblemDetail来实现Http错误的返回信息和问题细节,避免自定义新的错误返回格式...此时只要前端或后端看到状态码400,就明确知道这是前端的传参问题。 当然了,除了参数校验异常,业务上也需要自定义异常,根据开发手册和SonrLint的提示,这一步是必备的。...异常捕获将获取到系统内所有的未知/未捕获的异常,进行错误信息打印和统一返回体的包装,不会在出现漏打日志和异常未被捕获的情况。...(包装统一返回体)重新set进原本出现异常的Result中,这样便完成了异常的捕获和异常消息的传递。

    2.5K41

    spring security oauth2.x迁移到spring security5.x 令牌失效 资源服务器invalid_token响应状态码为500而非401

    环境 资源服务器迁移到spring security5.5.2 授权服务器仍使用spring security oauth2.x搭建 现象 使用无效的令牌访问资源服务器API时,希望返回401 未授权的响应...但实际返回的时500服务器错误 原因 授权服务器校验无效令牌时返回响应状态码为400 spring security5.x资源服务器OpaqueToken认证逻辑中,将状态码非200的令牌自省响应都以服务器异常抛出...) { // 不要将4xx错误以异常抛出 if (statusCode.is4xxClientError()) { return false...200的响应都以内省异常形式抛出,无法将授权错误的请求解析为TokenIntrospectionErrorResponse org.springframework.security.oauth2.server.resource.introspection.NimbusOpaqueTokenIntrospector...4xx,5xx的响应都以异常抛出 return this.restOperations.exchange(requestEntity, String.class); } catch (Exception

    2.1K20

    Spring Cloud Gateway中异常处理

    最近我们的项目在考虑使用Gateway,考虑使用Spring Cloud Gateway,发现网关的异常处理和spring boot 单体应用异常处理还是有很大区别的。让我们来回顾一下异常。...我当前所在项目的实践是,自定义业务类异常,在Controller或Service中抛出,让后使用Spring提供的异常接口统一处理我们自己在内部抛出的异常。这样一个异常处理架构就非常明了。...异常根据意义成三种:业务、系统、代码异常,不同的异常采用不同的处理方式。具体的什么样的异常怎么处理就不说了。 ?...} return message.toString(); } /** * 构建返回的JSON数据格式 * @...转发的异常,肯定是springboot单体中处理的,至于spring单体中的异常是怎么处理的呢?

    1.9K30

    Spring Cloud Gateway的全局异常处理

    Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。...网关都是给接口做代理转发的,后端对应的都是REST API,返回数据格式都是JSON。如果不做处理,当发生异常时,Gateway默认给出的错误信息是页面,不方便前端进行异常处理。...需要对异常信息进行处理,返回JSON格式的数据给客户端。下面先看实现的代码,后面再跟大家讲下需要注意的地方。...return message.toString(); } /** * 构建返回的JSON数据格式 * @param status 状态码 *...); } 如果我们定义的格式中没有status字段的话,这么就会报错,找不到对应的响应码,要么返回数据格式中增加status子段,要么重写,我这边返回的是code,所以要重写,代码如下: @Override

    3.7K30

    SpringBoot统一异常拦截处理

    2.手动抛出异常信息友好提示给用户。 一、 1.由于笔者用的是SpringCloud,首先要有一个Eureka服务,下面分别是eureka服务的启动类和配置,很简单,这里不做详细解释。...根据自己特定需要,配置对什么样的异常进行拦截处理,我只写了两种校验。...ParameterServiceException ,这是可以扩展的,根据你的需要。...下面我要利用我定义好的这几个类演示一下我请求有异常是返回给用户的效果 首先是get请求,测试手动抛出异常,当我请求参数是 1 触发了我手动抛出的异常。 ?...当代码在运行时抛出了异常时,首先拿着抛出位置到异常表中查找是否可以被catch(例如看位置是不是处于任何一栏中的开始和结束位置之间),如果可以则跑到异常处理的起始位置开始处理,如果没有找到则原地return

    1.9K61

    Spring MVC 你必须关注点

    Spring MVC配置简单,特别是在SpringBoot出现后基本都是开箱即用。在实际项目中通常是需要单独去处理一些特殊的情况,比如统一的异常处理,校验器以及国际化。...异常处理 Controller发生了异常该如何处理。直接抛出异常,这是一种不可取得行为,对前端不友好,而且也可能暴露服务端的一些细节,给网络攻击提供一些便利的信息。...这里面是统一对异常进行处理返回了自定义的HttpResponse对象。...().setMsg("unknown error"); } return response; } } 上述代码定义了一个通用error处理的页面,当框架抛出异常,会转到 /error...那么要实现一个多语言的网站就比较简单了,只需要在界面上设置一个选择语言的交互界面。选择后设置对应的Locale,后续的请求和返回的内容则可以根据Locale来定制。

    72120

    精讲RestTemplate第7篇-自定义请求失败异常处理

    该异常我是模拟出来的,将正确的请求服务地址由“/posts/1”改成“/postss/1”。服务不存在所以抛出404异常。...("HTTP 响应状态:" + statusCode); } 异常抛出之后,程序后面的代码就执行不到了,无法进行后面的代码执行。...从HttpResponse解析出Http StatusCode,如果状态码StatusCode为null,就抛出UnknownHttpStatusCodeException异常。 ?...参考: 《精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用》 和 《精讲RestTemplate第2篇-多种底层HTTP客户端类库的切换》 进行实现 ?...这时再去执行第一小节中的示例代码,就不会抛出异常。而是得到一个HTTP Status 404的结果。我们可以根据这个结果,在程序中继续向下执行代码。 ? 喜欢 (0)or分享 (0)

    3.1K31

    如何优雅的写 Controller 层代码?

    返回响应数据该如何统一的进行处理 接收到请求,处理业务逻辑时抛出了异常又该如何处理 Controller 层参数接收(太基础了,可以跳过) 常见的请求就分为 get 跟 post 两种: @RestController...,状态信息,这样前端妹妹接收到数据就可以根据不同的状态码,判断响应数据状态,是否成功是否异常进行不同的显示。...spring mvc 当然知道拉,所以给我们提供了一个 @RestControllerAdvice 来增强所有 @RestController,然后使用 @ExceptionHandler 注解,就可以拦截到对应的异常...,这里需要强调一下,code 代表 AppCode 的异常状态码,也就是 2000;msg 代表业务异常,这只是一个大类,一般前端会放到弹窗 title 上;最后 super(message); 这才是抛出的详细信息...public APIException(StatusCode statusCode, String message) { // message用于用户设置抛出错误详情,例如:当前价格

    86420

    Spring Cloud Gateway实战案例(限流、熔断回退、跨域、统一异常处理和重试机制)

    Spring Cloud Gateway 作为新一代网关,在性能上有很大提升,并且附加了诸如限流等实用的功能。 限流 开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。...Spring Cloud Gateway 中的全局异常处理不能直接使用 @ControllerAdvice,可以通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来匹配业务的需求。...网关是给接口做代理转发的,后端对应的是 REST API,返回数据格式是 JSON。如果不做处理,当发生异常时,Gateway 默认给出的错误信息是页面,不方便前端进行异常处理。...所以我们需要对异常信息进行处理,并返回 JSON 格式的数据给客户端。下面先看实现的代码,后面再跟大家讲一下需要注意的地方。 自定义异常处理逻辑,代码如下所示。...异常时如何返回 JSON 而不是 HTML?

    4.6K30

    Spring MVC更多家族成员---框架内异常处理与HandlerExceptionResolver---09

    HandlerExceptionResolver和Handler的关系最不一般,它们就好像双子座两兄弟一样,如果Handler执行过程中没有任何异常,将以ModelAndview的形式返回后继流程要用的视图和模型数据信息...,而一旦出现异常情况,HandlerExceptionResolver将接手异常情况的处理,处理完成后,将同样以ModelAndviewl的形式返回后继处理流程要使用的视图和模型数据信息。...只不过,HandlerExceptionResolver所返回的ModelAndview中所包含的信息是错误信息页面和相关异常的信息。...mvc默认加载的三个HandlerExceptionResolver其中一个,DefaultHandlerExceptionResolver提供了spring内部抛出的异常以及对应的响应错误码处理。...将根据它们的优先级顺序选取合适的实例进行异常处理。

    44250
    领券