feignclient服务间调用,
目录
FeignClient服务器抛出异常客户端处理假装异常拦截器FeignClient异常合集标记问题数字一(一)问题注射毒品
FeignClient服务器抛出异常客户端处理
在使用假装进行远程方法调用时,如果远程服务端方法出现异常,客户端有时需要捕获,并且把异常信息返回给前端,而如果在开启熔断之后,这个异常会被消化,所以说,如果希望拿到服务端异常,
feign.hystrix.enable需要设置为假的,而当不开熔断时,我们也有几种方法把拿到服务端的异常信息,下面总结一下。
feign异常拦截器
注册一个豆对象,当假装调用出现异常的时候,会触发这个方法:
导入com。测试。jsonutils导入佯。回应;导入佯100 . Util导入假装。编解码器。错误解码器;导入io。测试。badrequestexception导入io。测试。internalservererrorexception导入org。slf4j。记录者;导入org。SLF 4j。伐木工厂;导入org。spring框架。语境。注释。配置;导入Java。io。io异常;导入Java。util。hashmap导入Java。util。地图;导入静态佯。FeignException.errorStatus/* * * * @作者飘逝才子* @ date 2020/11/05 * @ description */@配置公开类FeignClientErrorDecoder实现错误解码器{私有记录器记录器=记录器工厂。获取记录器(FeignClientErrorDecoder。类);@ Override public Exception decode(String method key,Response response) { MapString,Object JSON body=new HashMap();jsonBody.put(message ,内部服务器错误);请尝试{ String body=util。tostring(响应。body().as reader());JSON body=jsonutils。tomap(身体);} catch(io异常e){ logger。错误(假装.IOException ,e);}断言jsonBody!=nullif(响应。status()=400响应。status()500){抛出新的BadRequestException(JSON体。获取(消息).toString());}如果(回应。status()=500){ throw new InternalServerErrorException(JSON body。获取(消息).toString());}返回errorStatus(methodKey,response);}}注意,使用这个方式,需要在熔断器关闭时才起作用,因为它们的执行过程是,先走这个拦截器,再走熔断的回退,所以这个异常会被熔断吞掉,返回状态为200,返回值为你的撤退的默认值。
FeignClient异常合集Mark
问题1
feignClient调用报异常原因:内容类型不能包含通配符类型"*"
是因为远程调用的时候入参识别不了应用程序/json
解决办法:在方法上加上类型即可消费=媒体类型。应用程序_ JSON _值
@请求映射(value=/XXX/XXX/XXX/XXX/result ,method=RequestMethod .GET,consumes=MediaType .APPLICATION _ JSON _ VALUE)响应结果XXX(task param task param);
问题2
fallback 与fallbackFactory的使用
fallbackFactory:抛出异常可查看,一般看里面抛出的异常日志即可判断远程调用的问题所在。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。