RestTemplate發(fā)送HTTP?GET請(qǐng)求使用方法詳解
前言
本文是精講RestTemplate第3篇,前篇的blog訪問(wèn)地址如下:
RestTemplate在Spring或非Spring環(huán)境下使用精講
RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫(kù)的切換用法
RestTemplate可以發(fā)送HTTP GET請(qǐng)求,經(jīng)常使用到的方法有兩個(gè):
getForObject()
getForEntity()
二者的主要區(qū)別在于,getForObject()返回值是HTTP協(xié)議的響應(yīng)體。getForEntity()返回的是ResponseEntity,ResponseEntity是對(duì)HTTP響應(yīng)的封裝,除了包含響應(yīng)體,還包含HTTP狀態(tài)碼、contentType、contentLength、Header等信息。
為了方便后續(xù)開(kāi)發(fā)測(cè)試,首先介紹一個(gè)網(wǎng)站給大家。JSONPlaceholder是一個(gè)提供免費(fèi)的在線REST API的網(wǎng)站,我們?cè)陂_(kāi)發(fā)時(shí)可以使用它提供的url地址測(cè)試下網(wǎng)絡(luò)請(qǐng)求以及請(qǐng)求參數(shù)?;蛘弋?dāng)我們程序需要獲取一些模擬數(shù)據(jù)、模擬圖片時(shí)也可以使用它。
一、 getForObject() 方法
1.1.以String的方式接受請(qǐng)求結(jié)果數(shù)據(jù)
在Spring Boot環(huán)境下寫(xiě)一個(gè)單元測(cè)試用例,以String類型接收響應(yīng)結(jié)果信息
@SpringBootTest
class ResttemplateWithSpringApplicationTests {
@Resource
private RestTemplate restTemplate;
@Test
void testSimple() {
String url = "http://jsonplaceholder.typicode.com/posts/1";
String str = restTemplate.getForObject(url, String.class);
System.out.println(str);
}
}getForObject第二個(gè)參數(shù)為返回值的類型,String.class以字符串的形式接受getForObject響應(yīng)結(jié)果,

1.2.以POJO對(duì)象的方式接受結(jié)果數(shù)據(jù)
在Spring Boot環(huán)境下寫(xiě)一個(gè)單元測(cè)試用例,以java POJO對(duì)象接收響應(yīng)結(jié)果信息
@Test
public void testPoJO() {
String url = "http://jsonplaceholder.typicode.com/posts/1";
PostDTO postDTO = restTemplate.getForObject(url, PostDTO.class);
System.out.println(postDTO.toString());
}輸出打印結(jié)果如下:

POJO的定義如下,根據(jù)JSON String的數(shù)據(jù)格式定義。
@Data
public class PostDTO {
private int userId;
private int id;
private String title;
private String body;
}1.3.以數(shù)組的方式接收請(qǐng)求結(jié)果
訪問(wèn)http://jsonplaceholder.typicode.com/posts 可以獲得JSON數(shù)組方式的請(qǐng)求結(jié)果

下一步就是我們?cè)撊绾谓邮眨褂梅椒ㄒ埠芎?jiǎn)單。在Spring Boot環(huán)境下寫(xiě)一個(gè)單元測(cè)試用例,以數(shù)組的方式接收請(qǐng)求結(jié)果。
@Test
public void testArrays() {
String url = "http://jsonplaceholder.typicode.com/posts";
PostDTO[] postDTOs = restTemplate.getForObject(url, PostDTO[].class);
System.out.println("數(shù)組長(zhǎng)度:" + postDTOs.length);
}請(qǐng)求的結(jié)果被以數(shù)組的方式正確接收,輸出如下:
數(shù)組長(zhǎng)度:100
1.4.使用占位符號(hào)傳參的幾種方式
以下的幾個(gè)請(qǐng)求都是在訪問(wèn)"http://jsonplaceholder.typicode.com/posts/1",只是使用了占位符語(yǔ)法,這樣在業(yè)務(wù)使用上更加靈活。
使用占位符的形式傳遞參數(shù):
String url = "http://jsonplaceholder.typicode.com/{1}/{2}";
PostDTO postDTO = restTemplate.getForObject(url, PostDTO.class, "posts", 1);另一種使用占位符的形式:
String url = "http://jsonplaceholder.typicode.com/{type}/{id}";
String type = "posts";
int id = 1;
PostDTO postDTO = restTemplate.getForObject(url, PostDTO.class, type, id);
我們也可以使用 map 裝載參數(shù):
String url = "http://jsonplaceholder.typicode.com/{type}/{id}";
Map<String,Object> map = new HashMap<>();
map.put("type", "posts");
map.put("id", 1);
PostDTO postDTO = restTemplate.getForObject(url, PostDTO.class, map);二、getForEntity()方法
上面的所有的getForObject請(qǐng)求傳參方法,getForEntity都可以使用,使用方法上也幾乎是一致的,只是在返回結(jié)果接收的時(shí)候略有差別。使用ResponseEntity<T> responseEntity來(lái)接收響應(yīng)結(jié)果。用responseEntity.getBody()獲取響應(yīng)體。響應(yīng)體內(nèi)容同getForObject方法返回結(jié)果一致。剩下的這些響應(yīng)信息就是getForEntity比getForObject多出來(lái)的內(nèi)容。
HttpStatus statusCode = responseEntity.getStatusCode();獲取整體的響應(yīng)狀態(tài)信息
int statusCodeValue = responseEntity.getStatusCodeValue(); 獲取響應(yīng)碼值
HttpHeaders headers = responseEntity.getHeaders();獲取響應(yīng)頭等
@Test
public void testEntityPoJo() {
String url = "http://jsonplaceholder.typicode.com/posts/5";
ResponseEntity<PostDTO> responseEntity
= restTemplate.getForEntity(url, PostDTO.class);
PostDTO postDTO = responseEntity.getBody(); // 獲取響應(yīng)體
System.out.println("HTTP 響應(yīng)body:" + postDTO.toString());
//以下是getForEntity比getForObject多出來(lái)的內(nèi)容
HttpStatus statusCode = responseEntity.getStatusCode(); // 獲取響應(yīng)碼
int statusCodeValue = responseEntity.getStatusCodeValue(); // 獲取響應(yīng)碼值
HttpHeaders headers = responseEntity.getHeaders(); // 獲取響應(yīng)頭
System.out.println("HTTP 響應(yīng)狀態(tài):" + statusCode);
System.out.println("HTTP 響應(yīng)狀態(tài)碼:" + statusCodeValue);
System.out.println("HTTP Headers信息:" + headers);
}輸出打印結(jié)果

以上就是RestTemplate發(fā)送HTTP GET請(qǐng)求使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate發(fā)送HTTP GET請(qǐng)求用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 關(guān)于RestTemplate中的Get請(qǐng)求
- RestTemplate調(diào)用POST和GET請(qǐng)求示例詳解
- RestTemplate Get請(qǐng)求實(shí)現(xiàn)bean參數(shù)傳遞詳解
- RestTemplate實(shí)現(xiàn)發(fā)送帶headers的GET請(qǐng)求
- spring boot RestTemplate 發(fā)送get請(qǐng)求的踩坑及解決
- 解決RestTemplate 的getForEntity調(diào)用接口亂碼的問(wèn)題
- RestTemplate發(fā)送get和post請(qǐng)求,下載文件的實(shí)例
- RestTemplate get請(qǐng)求攜帶headers自動(dòng)拼接參數(shù)方式
相關(guān)文章
小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn)
final關(guān)鍵字代表著最后、不可改變,無(wú)論是在用final修飾類、修飾方法還是修飾變量時(shí),都要注意內(nèi)存分配的問(wèn)題.這里來(lái)小議Java中final關(guān)鍵字使用時(shí)的注意點(diǎn):2016-06-06
JAVA構(gòu)造函數(shù)不能使用void關(guān)鍵字問(wèn)題
這篇文章主要介紹了JAVA構(gòu)造函數(shù)不能使用void關(guān)鍵字問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Java并發(fā)編程 interrupt()方法示例詳解
interrrupt()方法可以用來(lái)打斷正在運(yùn)行的線程,也可以打斷sleep()、wait()、join()情況下的線程,但是這些情況下被打斷線程的打斷標(biāo)記不同,這篇文章主要介紹了Java并發(fā)編程 interrupt()方法示例詳解,需要的朋友可以參考下2023-06-06
Java微信公眾平臺(tái)開(kāi)發(fā)(10) 微信自定義菜單的創(chuàng)建實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第十步,微信自定義菜單的創(chuàng)建實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04
JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼詳解
Feign是一個(gè)聲明式的Web Service客戶端,是一種聲明式、模板化的HTTP客戶端。而OpenFeign是Spring Cloud 在Feign的基礎(chǔ)上支持了Spring MVC的注解,如@RequesMapping等等,這篇文章主要給大家介紹了關(guān)于JWT在OpenFeign調(diào)用中進(jìn)行令牌中繼的相關(guān)資料,需要的朋友可以參考下2021-10-10
java利用Tabula實(shí)現(xiàn)對(duì)PDF內(nèi)表格數(shù)據(jù)提取
Tabula是一個(gè)開(kāi)源工具,用于從PDF文檔中提取表格數(shù)據(jù),下面小編就來(lái)和大家詳細(xì)介紹一下java如何通過(guò)Tabula對(duì)PDF文件內(nèi)表格進(jìn)行數(shù)據(jù)提取吧2023-09-09
自定義application.yml配置項(xiàng)方式
這篇文章主要介紹了自定義application.yml配置項(xiàng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Java關(guān)鍵字this(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
java中的this隨處可見(jiàn),用法也多。通常情況下理解this關(guān)鍵字還是很容易的,但是在我初學(xué)的時(shí)候,有一個(gè)疑問(wèn)卻一直不能很清晰的理解,現(xiàn)在慢慢的理解了,下面通過(guò)本文給大家記錄下,有需要的朋友參考下2017-03-03
java 線程中start方法與run方法的區(qū)別詳細(xì)介紹
這篇文章主要介紹了java 線程中start方法與run方法的區(qū)別詳細(xì)介紹的相關(guān)資料,在java線程中調(diào)用start方法與run方法的區(qū)別在哪里? 這兩個(gè)問(wèn)題是兩個(gè)非常流行的初學(xué)者級(jí)別的多線程面試問(wèn)題,這里進(jìn)行詳細(xì)說(shuō)明,需要的朋友可以參考下2016-11-11

