
首先看Contract这个接口类中只有一个parseAndValidatateMetadata方法,其余两个都是子类,我们可以打个断点逐步跟一下。
其中BaseContract这个类主要是做数据验证的功能
断点进来之后我们可以看到,实例中是一个IService的类,然后下面有两个checkState方法,checkState方法是做个验证,如果第一个参数true则走过,如果是false则返回异常信息。
其中targetTypegetTypeParameters()是获取类的泛型,在Feign中是不允许有泛型的,如果有则返回Parameterized types unsupported class name的异常
第二个targetTypegetInterfaces()length <= 1的意思就是这个类只能做单继承,否则继续抛出异常。
这个验证如果没问题就尽心下一个验证了:
如果这个类继承了一个类,那么我们就看下继承的类是否又继承了类,如果又继承了,则抛出错误: 该类仅支持单层次的继承。
这个方法就是判断类不能是个对象,也不能有static方法,下面还有个UtilisDefault(method)方法:
这里是判断方法不能仅仅是个pulic方法,且必须是个接口才行,看不懂的可以参见帖子:
>
对于上面这个接口,能看出哪里有错吗?服务端返回的报错:
第一反应是见了鬼了,明明是GET,怎么会提示"Request method 'POST' not supported"。搞了半天才发现是 @Herders里边的键值对冒号后面必须有个空格! 正确的写法:
另外,如果GET方法有一堆参数:
想要设置一个request实体类,把所有参数都包进去,放到>
在浏览器地址栏中输入某个URL地址或单击网页上的一个超链接时,浏览器发出的>
微服务直接的访问调用就会抛出未授权的异常,,解决方案 服务直接调用时携带令牌
Feign 拦截器
添加依赖:
<dependency>
<groupId>orgspringframeworkcloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>144RELEASE</version>
</dependency>
创建拦截器
import feignRequestInterceptor;
import feignRequestTemplate;
import orgspringframeworkwebcontextrequestRequestContextHolder;
import orgspringframeworkwebcontextrequestServletRequestAttributes;
import javaxservlet>
以上就是关于SpringCloud系列之Feign-8.深入了解FeignContract协议解析过程全部的内容,包括:SpringCloud系列之Feign-8.深入了解FeignContract协议解析过程、SpringCloud系列之Feign-4.Feign的动态代理、奇葩的FeignClient问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)