欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Feign遠(yuǎn)程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案

 更新時間:2022年03月04日 14:46:48   作者:楊林偉  
這篇文章主要介紹了Feign遠(yuǎn)程調(diào)用參數(shù)里面內(nèi)容丟失的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Feign遠(yuǎn)程調(diào)用參數(shù)里面內(nèi)容丟失

舉個例子

服務(wù)A提供了如下接口(注意這里的參數(shù)url是一個地址):

@GetMapping("/getSample")
public String getSample(@RequestParam String url){
?? ? //此處省略邏輯......
}

服務(wù)B需要調(diào)用服務(wù)A的接口,調(diào)用如下:

sampleFeignClient.getSample("http://www.xxx.com?name=dumas&age=18");

提出問題:此時調(diào)用服務(wù)A接口后,在A服務(wù)接收的方法體內(nèi),斷點會發(fā)現(xiàn)后面的參數(shù)age=18會丟失。

問題的原因:Feign遠(yuǎn)程調(diào)用是使用HTTP協(xié)議的,可能是獲取參數(shù)的時候,把參數(shù)url里面的內(nèi)容當(dāng)成了參數(shù),所以直接舍棄了。

解決方法

服務(wù)B調(diào)用前,使用URLEncoder.encode(url,"UTF-8");

服務(wù)A獲取參數(shù)后,使用URLDecoder.decode(url, "UTF-8");

Feign遠(yuǎn)程調(diào)用細(xì)節(jié)--丟失數(shù)據(jù)

同步調(diào)用

我這里只添加了header中的Cookie,當(dāng)然也可以遍歷header,把所有的都添加到新的請求,解決辦法跟Gateway丟失請求頭類似。

@Configuration
public class FeignConfiguration {
? ? //feign遠(yuǎn)程調(diào)用丟失請求頭問題
? ? @Bean("requestInterceptor")
? ? public RequestInterceptor requestInterceptor(){
? ? ? ? return template -> {
? ? ? ? ? ? ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
? ? ? ? ? ? HttpServletRequest request = attributes.getRequest();
? ? ? ? ? ? String cookie = request.getHeader("Cookie");
? ? ? ? ? ? template.header("Cookie",cookie);
? ? ? ? };
? ? }
}

異步調(diào)用

當(dāng)我們使用異步調(diào)用openfeign,上述代碼就會報空指針,獲取不到當(dāng)前的請求。

我們先獲取到當(dāng)前請求,再分享給子線程。

RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
? ? RequestContextHolder.setRequestAttributes(attributes);
? ? feign.doService();
}, executor);

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot XSS 攻擊過濾插件使用

    Spring Boot XSS 攻擊過濾插件使用

    這篇文章主要介紹了Spring Boot XSS 攻擊過濾插件使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 合并有序數(shù)組的實現(xiàn)(java與C語言)

    合并有序數(shù)組的實現(xiàn)(java與C語言)

    這篇文章主要介紹了合并有序數(shù)組的實現(xiàn)(java與C語言)的相關(guān)資料,這里對有序數(shù)組的合并分享了java版本和C語言版本的示例,需要的朋友可以參考下
    2017-08-08
  • java Callable接口和Future接口創(chuàng)建線程示例詳解

    java Callable接口和Future接口創(chuàng)建線程示例詳解

    這篇文章主要為大家介紹了java Callable接口和Future接口創(chuàng)建線程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • mybatis-plus阻止全表更新與刪除的實現(xiàn)

    mybatis-plus阻止全表更新與刪除的實現(xiàn)

    BlockAttackInnerInterceptor 是mybatis-plus的一個內(nèi)置攔截器,用于防止惡意的全表更新或刪除操作,本文主要介紹了mybatis-plus阻止全表更新與刪除的實現(xiàn),感興趣的可以了解一下
    2023-12-12
  • Kryo框架使用方法代碼示例

    Kryo框架使用方法代碼示例

    這篇文章主要介紹了Kryo框架的相關(guān)內(nèi)容,文中向大家分享了Kryo框架使用方法代碼示例,小編覺得挺不錯的,希望能給大家一個參考。
    2017-10-10
  • 簡單了解java標(biāo)識符的作用和命名規(guī)則

    簡單了解java標(biāo)識符的作用和命名規(guī)則

    這篇文章主要介紹了簡單了解java標(biāo)識符的作用和命名規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Spring Data Jpa實現(xiàn)自定義repository轉(zhuǎn)DTO

    Spring Data Jpa實現(xiàn)自定義repository轉(zhuǎn)DTO

    這篇文章主要介紹了Spring Data Jpa實現(xiàn)自定義repository轉(zhuǎn)DTO,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作

    JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作

    這篇文章主要介紹了JavaWeb實戰(zhàn)之編寫單元測試類測試數(shù)據(jù)庫操作,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)javaweb的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-04-04
  • Java線程之守護(hù)線程(Daemon)用法實例

    Java線程之守護(hù)線程(Daemon)用法實例

    這篇文章主要介紹了Java線程之守護(hù)線程(Daemon)用法,較為詳細(xì)的分析了守護(hù)線程的功能與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • java中stream去重的幾種方式舉例

    java中stream去重的幾種方式舉例

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列,這篇文章主要給大家介紹了關(guān)于java中stream去重的幾種方式,需要的朋友可以參考下
    2023-07-07

最新評論