精講RestTemplate第3篇-GET請(qǐng)求使用方法詳解

本文是精講RestTemplate第3篇了赌,前篇的blog訪問(wèn)地址如下:

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ù)開發(fā)測(cè)試缓待,首先介紹一個(gè)網(wǎng)站給大家。JSONPlaceholder是一個(gè)提供免費(fèi)的在線REST API的網(wǎng)站渠牲,我們?cè)陂_發(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)境下寫一個(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)境下寫一個(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)境下寫一個(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é)果

歡迎關(guān)注我的博客,里面有很多精品合集

  • 本文轉(zhuǎn)載注明出處(必須帶連接哆窿,不能只轉(zhuǎn)文字):字母哥博客链烈。

覺(jué)得對(duì)您有幫助的話,幫我點(diǎn)贊挚躯、分享强衡!您的支持是我不竭的創(chuàng)作動(dòng)力! 码荔。另外漩勤,筆者最近一段時(shí)間輸出了如下的精品內(nèi)容,期待您的關(guān)注目胡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锯七,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子誉己,更是在濱河造成了極大的恐慌眉尸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異噪猾,居然都是意外死亡霉祸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門袱蜡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丝蹭,“玉大人,你說(shuō)我怎么就攤上這事坪蚁”即” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵敏晤,是天一觀的道長(zhǎng)贱田。 經(jīng)常有香客問(wèn)我,道長(zhǎng)嘴脾,這世上最難降的妖魔是什么男摧? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮译打,結(jié)果婚禮上耗拓,老公的妹妹穿的比我還像新娘。我一直安慰自己奏司,他們只是感情好乔询,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著结澄,像睡著了一般哥谷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上麻献,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天们妥,我揣著相機(jī)與錄音,去河邊找鬼勉吻。 笑死监婶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的齿桃。 我是一名探鬼主播惑惶,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼短纵!你這毒婦竟也來(lái)了带污?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤香到,失蹤者是張志新(化名)和其女友劉穎鱼冀,沒(méi)想到半個(gè)月后报破,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡千绪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年充易,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荸型。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盹靴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瑞妇,到底是詐尸還是另有隱情稿静,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布踪宠,位于F島的核電站自赔,受9級(jí)特大地震影響妈嘹,放射性物質(zhì)發(fā)生泄漏柳琢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一润脸、第九天 我趴在偏房一處隱蔽的房頂上張望柬脸。 院中可真熱鬧,春花似錦毙驯、人聲如沸倒堕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垦巴。三九已至,卻和暖如春铭段,著一層夾襖步出監(jiān)牢的瞬間骤宣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工序愚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憔披,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓爸吮,卻偏偏與公主長(zhǎng)得像芬膝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子形娇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350