Feign 远程调用异常处理

Feign 异常处理

在目前微服务流行的年代,稍微大点的项目都会使用微服务架构模式。
当服务提供方响应为非 2xx 状态码时, feign调用将会抛出FeignException. 由于其异常message经过了Feint的封装, 所以不再是服务提供方的原始异常信息. 若想展示原始信息则需要重写ErrorDecoder来实现。

重写ErrorDecoder

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class FeignErrorDecoder implements ErrorDecoder {

@Override
public Exception decode(String methodKey, Response response) {

String message = null;
try {
if (response.body() != null) {
message = Util.toString(response.body().asReader(Util.UTF_8));
ApiResponse result = JsonUtil.parse(message, ApiResponse .class);

return new ServiceException(result.getMsg());
}
} catch (Exception ignored) {
}
return new RuntimeException(message);
}
}

配置全局Feign配置类

1
2
3
4
5
6
7
8
@Configuration
public class CustomizedConfiguration {

@Bean
public ErrorDecoder feignDecoder() {
return new FeignErrorDecoder();
}
}

说明:如果不加@Configuration,需要在@FeignClient指定配置类,在Feign进行远程调用后,需要对结果进行解码成具体的Java对象,如ApiResponse对象。

文章作者: GeYu
文章链接: https://nuistgy.github.io/2023/02/21/Feign异常处理/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yu's Blog