feign调用参数传不过去,feign远程调用的各种参数传递过程

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: