SpringCloud-feign客户端统一处理下游服务自定义异常(1.5.x版本下可以)

经过尝试和查阅资料,Springcloud处理下游服务的异常是是通过默认的ErrorDecoder实现处理的,最终上游业务获取抛出的异常处理都是FeignException处理,到时上游业务统一异常处理造成困扰,下面解决方式为:

@Slf4j
@Configuration
public class ExceptionErrorDecoder implements ErrorDecoder {

   @Override
   public Exception decode(String methodKey, Response response) {
       try {
           if (response.body() != null) {
               ExceptionInfo exceptionInfo = JSON.parseObject(Util.toString(response.body().asReader()), new TypeReference<ExceptionInfo>() {
               });
               Class clazz = Class.forName(exceptionInfo.getException());
               return (Exception) clazz.getDeclaredConstructor(String.class).newInstance(exceptionInfo.getMessage());
           }

       } catch (Exception e) {
           e.printStackTrace();
       }
       return FeignException.errorStatus(methodKey, response);
   }
}

主要分析了返回的body的内容,主要结构如下:

{
    "timestamp": 1538202442624,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "com.crazy.cloud.common.exception.DataConflictException",
    "message": "手机已注册",
    "path": "/users"
}
@Data
public class ExceptionInfo{

   private Long timestamp;

   private Integer status;
//异常包结构-"com.crazy.cloud.common.exception.DataConflictException"
   private String exception;
 //信息--手机已注册
   private String message;

   private String path;

   private String error;


}

分析能够得到--我们有了完整的包结构和message,所以我们完全可以通过反射生成一个同样的异常对象,这样我们在上游业务就可以被controllerAdvice捕获到,从而达到统一异常处理的目的。

微信公众号欢迎关注.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,582评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 沉默着的彼岸 我在岸的这边挥别 难舍的热泪汇成了河流 心在颤抖,你松开的手绢 手绢飘起了傍晚的彩云 ...
    君凉阅读 192评论 2 7
  • 新生儿打嗝是一种极为常见的现象,尤其多见于新生儿。这是由于小儿神经系统发育不完善,使控制膈肌运动的植物神经活动功能...
    呦呦宝宝说阅读 295评论 0 0
  • 我认识一对夫妻,从少男少女,到两鬓斑白。我熟悉他们的爱情,目睹了他们的前半生。其间的一路坎坷,风风雨雨,有我...
    董善芹阅读 774评论 4 0