feign调用参数传不过去,feign远程调用的各种参数传递过程
目录
假装远程调用参数丢失。例如,解决方案假装远程调用细节-丢失数据同步调用异步调用
Feign远程调用参数里面内容丢失
00-1010服务A提供了以下接口(注意这里的参数url是一个地址):
@ GetMapping (/GetSample )公共字符串get sample(@ request param String URL){//此处省略逻辑.}服务B需要调用服务A的接口,调用如下:
samplefeignclient . get sample( http://www . XXX.com?name=dumasage=18 );此时,提出问题:调用服务A接口后,断点会发现服务A接收到的方法体中会丢失下面的参数age=18
问题的原因:假装远程调用使用HTTP协议。可能是在获取参数的时候,把参数url中的内容当成了参数,所以直接丢弃了。
00-1010在调用服务B之前,使用URLEncoder.encode(url, UTF-8 );
a .服务获取参数后,使用URLDecoder.decode(url, UTF-8 );
举个例子
00-1010我只在这里的标题中添加了Cookie。当然,我也可以遍历头部,将它们全部添加到新请求中。解决方案类似于网关丢失请求头。
@ Configuration公共类Feign Configuration {//Feign Remote Call Lost Request Header Problem @ bean( RequestInterceptor )公共Request Interceptor请求拦截器(){ return template-{ ServletRequestAttributes attributes=(ServletRequestAttributes)requestcontextholder . getrequestattributes();http servlet request request=attributes . get request();string Cookie=request . get header( Cookie );template.header(Cookie ,Cookie);};}}
00-1010当我们使用openfeign的异步调用时,上面的代码会报告一个空指针,无法获取当前请求。
我们首先获取当前请求,然后与子线程共享它。
request attributes attributes=requestcontextholder . getrequestattributes();CompletableFutureVoid future=completablefuture . run async(()-{ requestcontextholder . setrequestattributes(attributes);feign . do service();},执行人);以上个人经验,希望能给大家一个参考,也希望大家能支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。