欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

SpringBoot捕获feign抛出异常的方法,

来源: javaer 分享于  点击 14619 次 点评:83

SpringBoot捕获feign抛出异常的方法,


目录
  • 前言
  • feign异常全局捕获
    • 定义一个异常类
    • 捕获feign请求异常
  • 总结

    前言

    使用Springboot时,使用feign客户端作为http请求工具时,当接口抛出异常信息时,使用全局异常是捕获不了异常的

    feign异常全局捕获

    定义一个异常类

    @Getter
    public class BusinessException extends RuntimeException {
    
        private String message;
    
        private int code;
    
        public BusinessException(String message, int code) {
            this.message = message;
            this.code = code;
        }
    
        public BusinessException(String message) {
            super(message);
            this.message = message;
        }
    
    
    
    }
    

    捕获feign请求异常

    @Slf4j
    @Configuration
    public class FeignExceptionConfig {
    
        @Bean
        public ErrorDecoder feignError() {
            return (key, response) -> {
                if (response.status() != HttpStatus.OK.value()) {
                    try {
                        String data = IOUtils.toString(response.body().asInputStream());
                        log.error("feign请求错误,返回值为:{{}}", data);
                        throw new BusinessException(data);
                    } catch (BusinessException e) {
                        throw e;
                    } catch (Exception e) {
                        log.error("异常信息为:", e);
                        throw new RuntimeException(e);
                    }
                }
    
                // 其他异常交给Default去解码处理
                // 这里使用单例即可,Default不用每次都去new
                return new ErrorDecoder.Default().decode(key, response);
            };
        }
    
    }
    

    或者在全局异常捕获加上这个

    @ExceptionHandler(FeignException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleFeignException(FeignException ex) {
        log.error("feign异常处理信息", ex);
        return ex.contentUTF8();
    }
    

    总结

    feign客户端是一个强大的请求工具,但是异常处理有时候得额外处理

    到此这篇关于SpringBoot捕获feign抛出异常的方法的文章就介绍到这了,更多相关SpringBoot捕获feign异常内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

    您可能感兴趣的文章:
    • Springboot集成OpenFeign Demo详解
    • springboot集成Feign的实现示例
    • SpringBoot项目中feignClient使用方式
    • SpringBoot中的@FeignClient注解使用
    • SpringBoot中@FeignClient 注解的作用
    相关栏目:

    用户点评