本文是精講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)注目胡。