SpringBoot捕获feign抛出异常的方法

 更新时间:2025年04月20日 09:31:01   作者:考虑考虑  
使用Springboot时,使用feign客户端作为http请求工具时,当接口抛出异常信息时,使用全局异常是捕获不了异常的,本文小编给大家介绍了SpringBoot捕获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异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven pom.xml文件获取当前时间戳方式

    Maven pom.xml文件获取当前时间戳方式

    这篇文章主要介绍了Maven pom.xml文件获取当前时间戳方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java多线程之线程安全问题详解

    Java多线程之线程安全问题详解

    这篇文章主要为大家详细介绍了Java多线程之线程安全问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • java删除文件夹的实现方式

    java删除文件夹的实现方式

    用户发现File.delete()无法删除非空目录,尝试自定义递归删除方法后,发现commons-io已提供FileUtils.deleteDirectory,建议优先使用第三方库避免重复造轮子,提升效率与代码可靠性
    2025-07-07
  • SpringBoot+Vue解决跨域问题几种处理方案介绍

    SpringBoot+Vue解决跨域问题几种处理方案介绍

    同源策略是一种约定,它是浏览器最核心也最基本的安全功能,同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互,所以本文我家里聊聊SpringBoot结合Vue解决跨域问题几种处理方案吧
    2025-07-07
  • Spring Cloud实现提供API给客户端的方法详解

    Spring Cloud实现提供API给客户端的方法详解

    这篇文章主要给大家介绍了关于Spring Cloud实现提供API给客户端的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • java实现token无感刷新+处理并发的后端方案

    java实现token无感刷新+处理并发的后端方案

    在Web应用中,Token用于身份验证和会话管理,但当Token过期时,可能会导致用户在提交表单或进行操作时突然被重定向到登录页面,本文就来介绍一下java实现token无感刷新+处理并发的后端方案,感兴趣的可以了解一下
    2024-11-11
  • 详解MyBatis日志如何做到兼容所有常用的日志框架

    详解MyBatis日志如何做到兼容所有常用的日志框架

    这篇文章主要介绍了详解MyBatis日志如何做到兼容所有常用的日志框架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • SpringBoot中的@Inherited注解详解

    SpringBoot中的@Inherited注解详解

    这篇文章主要介绍了SpringBoot中的@Inherited注解详解,@Inherited是一个标识,用来修饰注解,如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解,需要的朋友可以参考下
    2023-08-08
  • springcloud如何配置文件加载顺序

    springcloud如何配置文件加载顺序

    这篇文章主要介绍了springcloud如何配置文件加载顺序问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • 浅析Jmeter多用户token使用问题

    浅析Jmeter多用户token使用问题

    这篇文章主要介绍了Jmeter多用户token使用问题,通过具体的例子给大家介绍了Jmeter多用户token使用场景接口分析,需要的朋友可以参考下
    2021-10-10

最新评论