​提问是否能在fegin层设置一个类似于“拦截器”的东东,在微服务响应之后,fegin层拿到之前做一些公共处理

 目前系统中feign层只是类似于一个RPC远程调用“微服务”,当"微服务"抛出异常时,"微服务"内部会组装成了一个自定义的ErrorResponse对象返回给feign,  在 feign的接口中想获取这个ErrorResponse信息 目前想到的有两种解决方案:
 
1.每个fegin接口的“返回对象”都去继承这个ErrorResponse对象
2.希望能在返回之前,由fegin层的一个公共拦截器 去拦截,如果存在ErrorResponse对象的返回,则做统一异常处理, 直接再抛给"调用方"。这样的好处就是不用每个“返回对象”都去继承了, 而且由一个统一的地方去处理这个ErrorResponse,代码不冗余。

对于第二种目前只是个思路,至于这个“拦截器”怎么在feign弄还不清楚,跪求各路大神指教!!!
已邀请:

itmuch.com - 《Spring Cloud与Docker微服务架构实战》作者

赞同来自: baiqirui

Feign可以写拦截器。
写个RequestInterceptor就可以了。
不过您的需求不是用Feign的拦截器去实现,而是ErrorDecoder。
给个示例:
@Component
public class FeignClientExceptionErrorDecoder implements ErrorDecoder {
private final ErrorDecoder delegate = new ErrorDecoder.Default();
@Override
public Exception decode(String methodKey, Response response) {
// ... 我的处理我逻辑
return delegate.decode(methodKey, response);
}
}

要回复问题请先登录注册