SpringCloud系列之Feign-8.深入了解FeignContract协议解析过程

SpringCloud系列之Feign-8.深入了解FeignContract协议解析过程,第1张

首先看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问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10088070.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存