返回顶部
首页 > 资讯 > 精选 >Spring Cloud Gateway自定义异常处理Exception Handler的示例分析
  • 608
分享到

Spring Cloud Gateway自定义异常处理Exception Handler的示例分析

2023-06-20 21:06:45 608人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关spring cloud Gateway自定义异常处理Exception Handler的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法1: ErrorWEBExceptio

这篇文章给大家分享的是有关spring cloud Gateway自定义异常处理Exception Handler的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

方法1: ErrorWEBExceptionHandler (仅供示意)

自定义一个 GlobalErrorAttributes:

@Componentpublic class GlobalErrorAttributes extends DefaultErrorAttributes{    @Override    public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {        Throwable error = super.getError(request);        Map<String, Object> map = super.getErrorAttributes(request, options);        map.put("status", httpstatus.BAD_REQUEST.value());        map.put("message", error.getMessage());        return map;    }}

实现一个

@Component@Order(-2)public class GlobalErrorWebExceptionHandler extends AbstractErrorWebExceptionHandler {    public GlobalErrorWebExceptionHandler(GlobalErrorAttributes gea, ApplicationContext applicationContext,                                          ServerCodecConfigurer serverCodecConfigurer) {        super(gea, new WebProperties.Resources(), applicationContext);        super.setMessageWriters(serverCodecConfigurer.getWriters());        super.setMessageReaders(serverCodecConfigurer.getReaders());    }    //渲染htmlJSON    @Override    protected RouterFunction<ServerResponse> getRoutingFunction(final ErrorAttributes errorAttributes) {        return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);    }    private Mono<ServerResponse> renderErrorResponse(final ServerRequest request) {        final Map<String, Object> errorPropertiesMap = getErrorAttributes(request, ErrorAttributeOptions.defaults());        return ServerResponse.status(HttpStatus.BAD_REQUEST)                .contentType(MediaType.APPLICATION_jsON)                .body(BodyInserters.fromValue(errorPropertiesMap));    }}

方法2, 仅实现一个 ErrorAttributes, 以覆盖默认的 DefaultErrorAttributes

//spring 默认的就很好了.@Componentpublic class GatewayErrorAttributes extends DefaultErrorAttributes {    private static final Logger logger = LoggerFactory.getLogger(GatewayErrorAttributes.class);    @Override    public Map<String, Object> getErrorAttributes(ServerRequest request,  ErrorAttributeOptions options) {        Throwable error = super.getError(request);        Map<String, Object> errorAttributes = new HashMap<>(8);        errorAttributes.put("message", error.getMessage());        errorAttributes.put("method", request.methodName());        errorAttributes.put("path", request.path());        MergedAnnotation<ResponseStatus> responseStatusAnnotation = MergedAnnotations                .from(error.getClass(), MergedAnnotations.SearchStrategy.TYPE_HIERARCHY).get(ResponseStatus.class);        HttpStatus errorStatus = determineHttpStatus(error, responseStatusAnnotation);        //必须设置, 否则会报错, 因为 DefaultErrorWebExceptionHandler 的 renderErrorResponse 方法会获取此属性, 重新实现 DefaultErrorWebExceptionHandler也可.        errorAttributes.put("status", errorStatus.value());        errorAttributes.put("code", errorStatus.value());        //html view用        errorAttributes.put("timestamp", new Date());        //html view 用        errorAttributes.put("requestId", request.exchange().getRequest().getId());        errorAttributes.put("error", errorStatus.getReasonPhrase());        errorAttributes.put("exception", error.getClass().getName());        return errorAttributes;    }    //从DefaultErrorWebExceptionHandler中复制过来的    private HttpStatus determineHttpStatus(Throwable error, MergedAnnotation<ResponseStatus> responseStatusAnnotation) {        if (error instanceof ResponseStatusException) {            return ((ResponseStatusException) error).getStatus();        }        return responseStatusAnnotation.getValue("code", HttpStatus.class).orElse(HttpStatus.INTERNAL_SERVER_ERROR);    }    }

这样就可以了.

注意注意: 必须设置 errorAttributes.put("status", errorStatus.value()) , 否则会报错, 因为 DefaultErrorWebExceptionHandler 的 renderErrorResponse 方法会获取此属性. 除非你自己像方法一一样重新实现 DefaultErrorWebExceptionHandler.

然后在网关中访问一个不存在的服务, 即可看到效果.

curl 'http://127.0.0.1:8900/fundmain22/abc/Gogogo?id=1000' --header 'Accept: application/json'
{"exception":"org.springframework.web.server.ResponseStatusException","path":"/fundmain22/abc/gogogo","code":404,"method":"GET","requestId":"094e53e5-1","message":"404 NOT_FOUND","error":"Not Found","status":404,"timestamp":"2021-08-09T11:07:44.106+0000"}

感谢各位的阅读!关于“Spring Cloud Gateway自定义异常处理Exception Handler的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Spring Cloud Gateway自定义异常处理Exception Handler的示例分析

本文链接: https://lsjlt.com/news/300091.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring Cloud Gateway自定义异常处理Exception Handler的示例分析
    这篇文章给大家分享的是有关Spring Cloud Gateway自定义异常处理Exception Handler的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。方法1: ErrorWebExceptio...
    99+
    2023-06-20
  • Spring Cloud Gateway自定义异常处理Exception Handler的方法小结
    版本: Spring Cloud 2020.0.3 常见的方法有 实现自己的 DefaultErrorWebExceptionHandler 或 仅实现ErrorAttributes...
    99+
    2024-04-02
  • Spring Cloud gateway自定义错误处理Handler怎么实现
    本文小编为大家详细介绍“Spring Cloud gateway自定义错误处理Handler怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring Cloud gateway自定义错误处...
    99+
    2023-07-05
  • 一文吃透Spring Cloud gateway自定义错误处理Handler
    目录正文AbstractErrorWebExceptionHandlerisDisconnectedClientError方法isDisconnectedClientErrorMes...
    99+
    2023-03-01
    Spring Cloud gateway Handler Spring Cloud gateway 错误处理
  • SpringMVC异常处理机制与自定义异常处理方式的示例分析
    这篇文章主要介绍SpringMVC异常处理机制与自定义异常处理方式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!提到异常处理,就不得不提HandlerExceptionResolvers,我们的Dispat...
    99+
    2023-06-25
  • 自定义注解和springAOP捕获Service层异常并处理自定义异常的示例分析
    这篇文章主要为大家展示了“自定义注解和springAOP捕获Service层异常并处理自定义异常的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“自定义注解和springAOP捕获Serv...
    99+
    2023-06-15
  • Java异常处理操作Throwable、Exception、Error的示例分析
    这篇文章主要介绍了Java异常处理操作Throwable、Exception、Error的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。异常是一个事件,它发生在程序运...
    99+
    2023-06-15
  • python用户自定义异常的示例分析
    这篇文章主要介绍了python用户自定义异常的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说明程序可以通过创建一个新的异常类来命名它们自己的异常。异常应该是典型的继...
    99+
    2023-06-20
  • Spring Cloud Gateway Hystrix fallback获取异常信息的处理
    Gateway Hystrix fallback获取异常信息 gateway fallback后,需要知道请求的是哪个接口以及具体的异常信息,根据不同的请求以及异常进行不同的处理。一...
    99+
    2024-04-02
  • RestTemplate自定义请求失败异常处理示例解析
    目录前言一、异常现象二、源码解析-默认实现三、RestTemplate自定义异常处理前言 本文是精讲RestTemplate第7篇,前篇的blog访问地址如下: RestTempla...
    99+
    2024-04-02
  • PHP中Exception异常机制的示例分析
    这篇文章将为大家详细讲解有关PHP中Exception异常机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。异常的基本使用当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 &qu...
    99+
    2023-06-20
  • Spring Boot 中自定义异常怎么处理
    这篇文章将为大家详细讲解有关Spring Boot 中自定义异常怎么处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @Co...
    99+
    2023-06-02
  • MySQL异常处理的示例分析
    这篇文章给大家分享的是有关MySQL异常处理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。针对存储过程 、触发器或函数内部语句可能发生的错误或警告信息,需要进行相关异常...
    99+
    2024-04-02
  • Spring框架中异常处理情况的示例分析
    这篇文章主要为大家展示了“Spring框架中异常处理情况的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring框架中异常处理情况的示例分析”这篇文章吧。1.编写一个类,实现Hand...
    99+
    2023-06-20
  • Spring自定义XML schema 扩展的示例分析
    小编给大家分享一下Spring自定义XML schema 扩展的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring整合dubbo的事例<be...
    99+
    2023-06-15
  • Spring Boot全局统一异常处理器的示例分析
    这篇文章主要介绍Spring Boot全局统一异常处理器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、封装统一返回结果类import com.jiusen.exercise.enums.Err...
    99+
    2023-06-15
  • React16中异常处理的示例分析
    这篇文章主要介绍React16中异常处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异常处理在 React 15.x 及之前的版本中,组件内的异常有可能会影响到 Reac...
    99+
    2024-04-02
  • Java中异常处理的示例分析
    这篇文章主要介绍Java中异常处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!异常的定义在java中,异常就是java在编译、运行或运行过程中出现的错误总共有三种:1.编译错误 2.运行错误 3.逻辑错误...
    99+
    2023-06-25
  • 基于spring-security出现401 403错误自定义处理的示例分析
    这篇文章将为大家详细讲解有关基于spring-security出现401 403错误自定义处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。spring-security 401 403错误自定...
    99+
    2023-06-20
  • MySQL中存储过程定义条件和异常处理的示例分析
    小编给大家分享一下MySQL中存储过程定义条件和异常处理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 查看调用存储过程时的报错代码mysql>...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作