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

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";
    // 因?yàn)閞esponseType用的是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)
    // 因?yàn)閞esponseType用的是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();
    // 因?yàn)閞esponseType用的是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整合Mybatis-plus的具體過程使用

    SpringBoot整合Mybatis-plus的具體過程使用

    這篇文章主要介紹了SpringBoot?整合mybatis+mybatis-plus的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java Stream流零基礎(chǔ)教程

    Java Stream流零基礎(chǔ)教程

    Java8的另一大亮點(diǎn)Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關(guān)于Java8中Stream詳細(xì)使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 一文教你如何判斷Java代碼中異步操作是否完成

    一文教你如何判斷Java代碼中異步操作是否完成

    在許多應(yīng)用程序中,我們經(jīng)常使用異步操作來提高性能和響應(yīng)度,這篇文章主要介紹了幾種常見的方法來判斷Java代碼中異步操作是否完成,希望對大家有所幫助
    2024-02-02
  • Java實(shí)現(xiàn)合并word文檔的示例代碼

    Java實(shí)現(xiàn)合并word文檔的示例代碼

    在做項(xiàng)目中,經(jīng)常會遇到一種情況,需要將一個小word文檔的內(nèi)容插入到一個大word(主文檔)中。本文就為大家準(zhǔn)備了Java實(shí)現(xiàn)合并word文檔的方法,需要的可以參考一下
    2022-08-08
  • Java 線程池ThreadPoolExecutor源碼解析

    Java 線程池ThreadPoolExecutor源碼解析

    這篇文章主要介紹了Java 線程池ThreadPoolExecutor源碼解析
    2022-03-03
  • 配置Ant執(zhí)行Jmeter腳本過程詳解

    配置Ant執(zhí)行Jmeter腳本過程詳解

    這篇文章主要介紹了配置Ant執(zhí)行Jmeter腳本過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java微信公眾平臺開發(fā)(1) 接入微信公眾平臺

    Java微信公眾平臺開發(fā)(1) 接入微信公眾平臺

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺開發(fā)第一步,接入微信公眾平臺,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • java如何創(chuàng)建一個jdbc程序詳解

    java如何創(chuàng)建一個jdbc程序詳解

    使用Java程序來操作數(shù)據(jù)庫,后者更加直接的話就是使用Java程序來發(fā)送SQL語句的技術(shù)稱之為:JDBC。下面這篇文章主要給大家介紹了關(guān)于利用java如何創(chuàng)建一個jdbc程序的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-11-11
  • 15個頂級Java多線程面試題(附答案)

    15個頂級Java多線程面試題(附答案)

    這篇文章主要為大家分享了15個頂級Java多線程面試題,考察面試者是否有足夠的Java線程與并發(fā)知識,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • SpringBoot 緩存 Caffeine使用解析

    SpringBoot 緩存 Caffeine使用解析

    這篇文章主要介紹了SpringBoot 緩存 Caffeine使用解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論