前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >feign client抛出自定义异常

feign client抛出自定义异常

作者头像
十毛
发布2023-10-16 16:34:28
3690
发布2023-10-16 16:34:28
举报

feign client远程调用时,如果遇到返回的http status不是200的情况,则会抛出异常feign.FeignException。但是这种异常不方便处理,所以最好还是根据错误信息抛出自定义异常

抛出自定义异常

  • 自定义异常
代码语言:javascript
复制
public class HwException extends RuntimeException {
    public HwException(String message) {
        super(message);
    }
}
  • 定义ErrorDecoder
代码语言:javascript
复制
public class HwNetApiErrorDecoder implements ErrorDecoder {
    final ObjectMapper mapper;

    public HwNetApiErrorDecoder(ObjectMapper mapper) {
        this.mapper = mapper;
    }

    @Override
    public Exception decode(String methodKey, Response response) {
        if (HttpStatus.OK.value() == response.status()) {
            //这里不应该出现,因为只有不是200的返回结果,才是错误
            FeignException exception = errorStatus(methodKey, response);
            throw new RuntimeException(exception);
        }
        try {
            HwNetResult<?> netRet = mapper.readValue(response.body().asInputStream(), HwNetResult.class);
            if (netRet.isSuccess()) {
                throw new RuntimeException("return values is success but http status is not 200");
            }
            throw new HwException(netRet.getErrorCode());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
  • Feign自定义配置:
代码语言:javascript
复制
public class WxFeignConfiguration {
    @Bean
    public HwNetApiErrorDecoder hwNetApiErrorDecoder(ObjectMapper mapper) {
        return new HwNetApiErrorDecoder(mapper);
    }
}

效果

  • 当http请求返回400错误时,并且error_code="one_IE"时,则会抛出异常HwException: one_IE
代码语言:javascript
复制
java.lang.IllegalStateException: Failed to execute ApplicationRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:762)
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:749)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
    at com.wx.demo.server.WxkjDemoServerApplication.main(WxkjDemoServerApplication.java:34)
Caused by: com.wx.hardware.huawei.api.service.HwException: one_IE
    at com.wx.hardware.huawei.api.service.HwNetApiErrorDecoder.decode(HwNetApiErrorDecoder.java:34)
    at feign.ResponseHandler.decodeError(ResponseHandler.java:136)
    at feign.ResponseHandler.handleResponse(ResponseHandler.java:70)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:114)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:70)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:96)
    at com.sun.proxy.$Proxy77.deviceInfo(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抛出自定义异常
  • 效果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档