您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“RestTemplate怎么調(diào)用POST和GET請求”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“RestTemplate怎么調(diào)用POST和GET請求”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
在日常開發(fā)過程中,http接口不僅提供給前端調(diào)用,有的時候還需要提供給其他業(yè)務方調(diào)用,在后臺調(diào)用http請求的時候,我們一般使用Http Client客戶端調(diào)用,java常用的Http客戶端有:
java原生的HttpURLConnection
Apache http client
OkHttp
RestTemplate
在RestTemplate中,對同一種請求方式,一般有兩種調(diào)用方法:
xxForObject
返回一個指定類型的對象,通常是響應體反序列化后的java對象
只返回反序列化的java對象,沒有額外的http相應信息,只知道請求是否成功。
xxForEntity
返回的是一個ResponseEntity對象,其中包含完整的http響應信息(狀態(tài)碼、響應頭、響應體)
postForObject
/** String/URI url: 請求的URL路徑 request: 一般設置請求頭和請求體 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ù)名稱一樣才能在運行時將占位符位置替換成傳入動態(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ù)名稱一樣才能在運行時將占位符位置替換成傳入動態(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(響應頭)、body(響應體) ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, httpEntity, String.class); }
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)用可以理解為是一個萬能調(diào)用,不特定是post還是get類型調(diào)用,請求方式由調(diào)用者指定。 ps:如果在get請求中需要指定請求頭和請求體,而getForXX又不支持方法又不支持設置請求頭,此時可以改成用exchange方法來調(diào)用,自己往HttpEntity<?> requestEntity參數(shù)中設置請求頭和體。
讀到這里,這篇“RestTemplate怎么調(diào)用POST和GET請求”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。