最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?restTemplate發(fā)送get請(qǐng)求query參數(shù)傳遞問(wèn)題解決

 更新時(shí)間:2023年11月17日 11:59:10   作者:DiracKeeko  
這篇文章主要為大家介紹了Java?restTemplate發(fā)送get請(qǐng)求query參數(shù)傳遞問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

出場(chǎng)演員

  • 前端A
  • 后端B
  • 后端C

Java項(xiàng)目是spring boot的controller,service,dao三層架構(gòu)。

最近開發(fā)了一個(gè)需求,其中有個(gè)子功能的實(shí)現(xiàn)需要我的后端B接收到前端A發(fā)來(lái)的get請(qǐng)求,這個(gè)get請(qǐng)求有query參數(shù)(形如: http://url?param1=value1)。再?gòu)暮蠖薆發(fā)出一個(gè)get請(qǐng)求攜帶query參數(shù)去后端C請(qǐng)求數(shù)據(jù)。

在實(shí)現(xiàn)上述子功能的過(guò)程中出現(xiàn)了get請(qǐng)求query參數(shù)加不上去的問(wèn)題。

出現(xiàn)問(wèn)題的過(guò)程

在后端B中的controller層解析了param1,并創(chuàng)建

HashMap<String, String> paramMap = new HashMap<>();
paramMap.put(“param1”, value1);

將paramMap傳遞到controller,再傳遞到dao中,在dao層調(diào)用restTemplate.exchange()發(fā)送請(qǐng)求。

最開始的時(shí)候查到RestTemplate中的這個(gè)方法 (重載方法1)

Public ResponseEntity exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, Class responseType, Map uriVariables) {}

調(diào)用了restTemplate.exchange(url, HttpMethod.GET, req, String.class, paramMap);來(lái)向后端C請(qǐng)求數(shù)據(jù),結(jié)果一直報(bào)錯(cuò),返回參數(shù)異常。

排查

排查下來(lái)發(fā)現(xiàn),就是query沒(méi)帶上(預(yù)期http://urlToC?param1=value1,實(shí)際上只發(fā)出去http://urlToC )
繼續(xù)往后排查

嘗試直接用字符串拼接的方式將query拼接到url的后面,然后調(diào)用另外一個(gè)exchange的重載方法 (重載方法2),restTemplate.exchange(url, HttpMethod.GET, req, String.class);

也就是說(shuō)發(fā)送get請(qǐng)求,這個(gè)過(guò)程本身沒(méi)有問(wèn)題,問(wèn)題出在重載方法1中query參數(shù)沒(méi)有成功拼接到url之后。

解決

再往后查,發(fā)現(xiàn)重載方法1需要配合模板來(lái)使用。

public static void main(String[] args) {
     // 創(chuàng)建RestTemplate實(shí)例
     RestTemplate restTemplate = new RestTemplate();
     // 設(shè)置請(qǐng)求的帶參URL模板
     String url = "https://api.example.com/data?param1={param1}&param2={param2}";
     // 設(shè)置查詢參數(shù)
     Map<String, String> params = new HashMap<>();
     params.put("param1", "value1");
     params.put("param2", "value2");
     // 發(fā)送GET請(qǐng)求
     ResponseEntity<String> responseEntity = restTemplate.exchange(
             url,
             HttpMethod.GET,
             null,
             String.class,
             params
     );
     // 處理響應(yīng)
     String responseBody = responseEntity.getBody();
     System.out.println(responseBody);
}

這個(gè)方法并不通用(它只能用在params key確定的場(chǎng)景)

對(duì)一個(gè)params不確定的場(chǎng)景,應(yīng)該用UriComponentsBuilder來(lái)處理query的拼接

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
for (Map.Entry<String, String> entry : params.entrySet()) { 
    builder.queryParam(entry.getKey(), entry.getValue());
    
}
String urlWithParams = builder.toUriString();

得到urlWithParams之后,通過(guò)重載方法2發(fā)送get請(qǐng)求。

以上就是Java restTemplate發(fā)送get請(qǐng)求query參數(shù)傳遞問(wèn)題解決的詳細(xì)內(nèi)容,更多關(guān)于Java restTemplate發(fā)送請(qǐng)求的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)

    Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)

    lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡(jiǎn)單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8新特性Lambda表達(dá)式的一些復(fù)雜用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • SpringBoot集成Dubbo啟用gRPC協(xié)議

    SpringBoot集成Dubbo啟用gRPC協(xié)議

    這篇文章主要介紹了SpringBoot集成Dubbo啟用gRPC協(xié)議,以及與原生 gRPC 在代碼編寫過(guò)程中的區(qū)別。感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • Java 中jasperReport實(shí)現(xiàn)動(dòng)態(tài)列打印的實(shí)現(xiàn)代碼

    Java 中jasperReport實(shí)現(xiàn)動(dòng)態(tài)列打印的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java 中jasperReport實(shí)現(xiàn)動(dòng)態(tài)列打印的實(shí)現(xiàn)代碼的相關(guān)資料,希望通過(guò)本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Java線程休眠的5種方法

    Java線程休眠的5種方法

    這篇文章主要介紹了Java線程休眠的5種方法,分別是Thread.sleep、TimeUnit、wait、Condition、LockSupport,下面文章將對(duì)這五種方法進(jìn)行詳細(xì)講解,需要的小伙伴可以參考一下
    2022-05-05
  • Springboot中使用緩存的示例代碼

    Springboot中使用緩存的示例代碼

    這篇文章主要介紹了Springboot中使用緩存的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • WebSocket簡(jiǎn)介與消息推送

    WebSocket簡(jiǎn)介與消息推送

    這篇文章介紹了WebSocket簡(jiǎn)介與消息推送,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • dubbo之@Reference注解作用說(shuō)明

    dubbo之@Reference注解作用說(shuō)明

    這篇文章主要介紹了dubbo之@Reference注解作用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 圖解Eclipse j2ee開發(fā)環(huán)境的搭建過(guò)程

    圖解Eclipse j2ee開發(fā)環(huán)境的搭建過(guò)程

    這篇文章以圖文結(jié)合的方式介紹了Eclipse j2ee開發(fā)環(huán)境的搭建過(guò)程,內(nèi)容很詳細(xì),每一個(gè)步驟都有對(duì)應(yīng)的操作截圖,需要的朋友可以參考下
    2015-08-08
  • Spring?Boot實(shí)現(xiàn)登錄驗(yàn)證碼功能的案例詳解

    Spring?Boot實(shí)現(xiàn)登錄驗(yàn)證碼功能的案例詳解

    驗(yàn)證碼的作用可以有效防止其他人對(duì)某一個(gè)特定的注冊(cè)用戶用特定的程序暴力破解方式進(jìn)行不斷的登錄嘗試,接下來(lái)通過(guò)本文給大家介紹Spring?Boot實(shí)現(xiàn)登錄驗(yàn)證碼功能,需要的朋友可以參考下
    2022-08-08
  • Maven如何打入依賴中指定的部分jar包

    Maven如何打入依賴中指定的部分jar包

    當(dāng)項(xiàng)目運(yùn)行的環(huán)境里已經(jīng)有一個(gè)jar包是pom文件依賴其他項(xiàng)目的jar包,所以最后得到的項(xiàng)目jar包中還需要打入其他項(xiàng)目的最新代碼,接下來(lái)通過(guò)本文給大家介紹Maven打入依賴jar包的操作工程,需要的朋友參考下吧
    2021-06-06

最新評(píng)論

松滋市| 晋州市| 彭州市| 鲁甸县| 龙江县| 临澧县| 施甸县| 富顺县| 兴国县| 南丰县| 吉林省| 玉溪市| 天镇县| 瑞丽市| 桂林市| 建阳市| 平利县| 凤冈县| 海门市| 青河县| 中山市| 昌黎县| 会泽县| 梅河口市| 大庆市| 澄城县| 汝城县| 泰顺县| 阿瓦提县| 进贤县| 阿勒泰市| 昆山市| 宁乡县| 邢台市| 黑龙江省| 驻马店市| 漯河市| 久治县| 龙口市| 宣恩县| 宝清县|