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

RestTemplate調(diào)用POST和GET請求示例詳解

 更新時間:2023年03月31日 10:28:01   作者:ambitioncoder  
這篇文章主要為大家介紹了RestTemplate調(diào)用POST和GET請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

在日常開發(fā)過程中,http接口不僅提供給前端調(diào)用,有的時候還需要提供給其他業(yè)務(wù)方調(diào)用,在后臺調(diào)用http請求的時候,我們一般使用Http Client客戶端調(diào)用,java常用的Http客戶端有:

  • java原生的HttpURLConnection
  • Apache http client
  • OkHttp
  • RestTemplate

下面來詳細(xì)介紹一下使用RestTemplate來調(diào)用Post和Get請求。

在RestTemplate中,對同一種請求方式,一般有兩種調(diào)用方法:

  • xxForObject
    • 返回一個指定類型的對象,通常是響應(yīng)體反序列化后的java對象
    • 只返回反序列化的java對象,沒有額外的http相應(yīng)信息,只知道請求是否成功。
  • xxForEntity
    • 返回的是一個ResponseEntity對象,其中包含完整的http響應(yīng)信息(狀態(tài)碼、響應(yīng)頭、響應(yīng)體)

一、POST請求調(diào)用

  • postForObject
/**
    String/URI url: 請求的URL路徑
    request: 一般設(shè)置請求頭和請求體
    responseType:請求完成之后返回的結(jié)果類型
    Map<String, ?>/Object... uriVariables: 用來拼接請求url,可以是Map<String, ?>類型或Object類型可變參數(shù)
**/
postForObject/postForEntity(String url, Object request, Class<T> responseType, Object... uriVariables)
eg:
void fun() {
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON);
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
    // 注意,如果想要使用可變參數(shù)來拼接url,那這里的url一定要使用占位符{}替換,并且名稱要和可變參數(shù)名稱一樣才能在運(yùn)行時將占位符位置替換成傳入動態(tài)參數(shù)【可變參數(shù)也可以不傳,那么這里的url就不需要占位符拼接】
    String url = "http://www.sea.com?uid={uid}&username={username}";
    String uid = "123";
    String username = "sea";
    // 因為responseType用的是String類型,所以返回的是一個String類型字符串
    String result = restTemplate.postForObject(url, httpEntity, String.class, uid, username);
}
postForObject/postForEntity(String url, Object request, Class<T> responseType, Map<String, ?> uriVariables)
eg:
void fun() {
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON);
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
    // 注意,如果想要使用可變參數(shù)來拼接url,那這里的url一定要使用占位符{}替換,并且名稱要和可變參數(shù)名稱一樣才能在運(yùn)行時將占位符位置替換成傳入動態(tài)參數(shù)
    String url = "http://www.sea.com?uid={uid}&username={username}";
    Map<String, Object> params = new HashMap<>();
    String uid = "123";
    String username = "sea";
    params.put("uid", uid);
    params.put("username", username)
    // 因為responseType用的是String類型,所以返回的是一個String類型字符串
    String result = restTemplate.postForObject(url, httpEntity, String.class, params);
}
postForObject/postForEntity(URI url, Object request, Class<T> responseType)
eg:
void fun() {
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.APPLICATION_JSON);
    MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
    HttpEntity<String> httpEntity = new HttpEntity<>(params, headers);
    String url = "http://www.sea.com";
    MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
    multiValueMap.put("uid", 123);
    multiValueMap.put("username", "sea");
    // 不再使用可變參數(shù)綁定url,直接傳入綁定后的uri參數(shù)
    URI uri = UriComponentsBuilder.fromHttpUrl(url).queryParams(multiValueMap).build().encode().toUri();
    // 因為responseType用的是String類型,所以返回的是一個String類型字符串
    String result = restTemplate.postForObject(uri, httpEntity, String.class);
}
eg: xxforEntity()
void fun() {
    Map<String, Object> map = new HashMap<>();
    map.put("uid", 123);
    map.put("username", "sea");
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    HttpEntity<HashMap<String, Object>> httpEntity = new HttpEntity<>(map, headers);
    String url = "http://www.sea.com";
    // 使用xxforEntity,返回的是一個ResponseEntity,里面包含了statusCode(狀態(tài)碼)、Headers(響應(yīng)頭)、body(響應(yīng)體)
    ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, httpEntity, String.class);
}

二、GET請求調(diào)用

getForObject/getForEntity(String url, Class<T> responseType, Object... uriVariables)
getForObject/getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables)
getForObject/getForEntity(URI url, Class<T> responseType)
在get請求調(diào)用中,除了請求參數(shù)中少了Object request【請求頭和請求體】,其他的參數(shù)和方法調(diào)用同上面post的方法調(diào)用是一樣的

三、Exchange調(diào)用

exchange調(diào)用可以理解為是一個萬能調(diào)用,不特定是post還是get類型調(diào)用,請求方式由調(diào)用者指定。 ps:如果在get請求中需要指定請求頭和請求體,而getForXX又不支持方法又不支持設(shè)置請求頭,此時可以改成用exchange方法來調(diào)用,自己往HttpEntity<?> requestEntity參數(shù)中設(shè)置請求頭和體。

以上就是RestTemplate調(diào)用POST和GET請求示例詳解的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate調(diào)用POST GET的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot項目快速實(shí)現(xiàn)Aop功能

    Springboot項目快速實(shí)現(xiàn)Aop功能

    這篇文章主要介紹了Springboot項目如何快速實(shí)現(xiàn)Aop功能,對此方面感興趣的小伙伴可以詳細(xì)參考閱讀本文,本文有一定的參考價值
    2023-03-03
  • Java中的CompletableFuture使用解析

    Java中的CompletableFuture使用解析

    這篇文章主要介紹了Java中的CompletableFuture使用解析,為什么CompletableFuture要定制化線程池,因為默認(rèn)的線程池是ForkJoinPool,這個線程池的最大線程數(shù)默認(rèn)是你的電腦的線程數(shù)數(shù)減1,假如我線程電腦是4核8線程的,ForkJoinPool的最大線程數(shù)就是7,需要的朋友可以參考下
    2024-01-01
  • 如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類

    這篇文章主要介紹了如何用ObjectMapper將復(fù)雜Map轉(zhuǎn)換為實(shí)體類的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 關(guān)于在Java中反轉(zhuǎn)數(shù)組的4種詳細(xì)方法

    關(guān)于在Java中反轉(zhuǎn)數(shù)組的4種詳細(xì)方法

    這篇文章主要介紹了關(guān)于在Java中反轉(zhuǎn)數(shù)組的4種詳細(xì)方法,數(shù)組是一個固定長度的存儲相同數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu),數(shù)組中的元素被存儲在一段連續(xù)的內(nèi)存空間中,今天我們來學(xué)習(xí)一下如何反轉(zhuǎn)數(shù)組
    2023-05-05
  • MyBatis中批量插入和批量更新的實(shí)現(xiàn)方法詳解

    MyBatis中批量插入和批量更新的實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了MyBatis中批量插入和批量更新的實(shí)現(xiàn)方法,在日常開發(fā)中有時候需要從A數(shù)據(jù)庫提取大量數(shù)據(jù)同步到B系統(tǒng),這種情況自然是需要批量操作才行,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • java?對象實(shí)例化過程中的多態(tài)特性解析

    java?對象實(shí)例化過程中的多態(tài)特性解析

    這篇文章主要介紹了java?對象實(shí)例化過程中的多態(tài)特性解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java 從網(wǎng)上下載文件的幾種方式實(shí)例代碼詳解

    Java 從網(wǎng)上下載文件的幾種方式實(shí)例代碼詳解

    本文通過實(shí)例代碼給大家介紹了java從網(wǎng)上下載文件的幾種方式,非常不錯,具有參考借鑒價值,需要的的朋友參考下吧
    2017-08-08
  • Java實(shí)現(xiàn)無損Word轉(zhuǎn)PDF的示例代碼

    Java實(shí)現(xiàn)無損Word轉(zhuǎn)PDF的示例代碼

    本文將利用Java中的兩個jar包:pdfbox和aspose-words實(shí)現(xiàn)無損Word轉(zhuǎn)PDF功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動手嘗試一下
    2022-06-06
  • Java使用MulticastSocket實(shí)現(xiàn)群聊應(yīng)用程序

    Java使用MulticastSocket實(shí)現(xiàn)群聊應(yīng)用程序

    這篇文章主要為大家詳細(xì)介紹了Java使用MulticastSocket實(shí)現(xiàn)群聊應(yīng)用程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 使用IDEA搭建一個簡單的SpringBoot項目超詳細(xì)過程

    使用IDEA搭建一個簡單的SpringBoot項目超詳細(xì)過程

    這篇文章主要介紹了使用IDEA搭建一個簡單的SpringBoot項目超詳細(xì)過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論

兴仁县| 健康| 镇安县| 莱芜市| 临海市| 白玉县| 师宗县| 潞城市| 榆社县| 达拉特旗| 益阳市| 辽中县| 同心县| 思南县| 临澧县| 长丰县| 洛川县| 大港区| 伊宁市| 蓬莱市| 福州市| 临汾市| 镇原县| 孝义市| 临猗县| 临清市| 鹤山市| 瓮安县| 兴义市| 克拉玛依市| 乐至县| 兴和县| 大连市| 丰顺县| 东兴市| 辉南县| 即墨市| 浦东新区| 辉县市| 灌阳县| 抚松县|