RestTemplate發(fā)送HTTP?GET請求使用方法詳解
前言
本文是精講RestTemplate第3篇,前篇的blog訪問地址如下:
RestTemplate在Spring或非Spring環(huán)境下使用精講
RestTemplate實現(xiàn)多種底層HTTP客戶端類庫的切換用法
RestTemplate可以發(fā)送HTTP GET請求,經(jīng)常使用到的方法有兩個:
getForObject()
getForEntity()
二者的主要區(qū)別在于,getForObject()返回值是HTTP協(xié)議的響應體。getForEntity()返回的是ResponseEntity,ResponseEntity是對HTTP響應的封裝,除了包含響應體,還包含HTTP狀態(tài)碼、contentType、contentLength、Header等信息。
為了方便后續(xù)開發(fā)測試,首先介紹一個網(wǎng)站給大家。JSONPlaceholder是一個提供免費的在線REST API的網(wǎng)站,我們在開發(fā)時可以使用它提供的url地址測試下網(wǎng)絡請求以及請求參數(shù)。或者當我們程序需要獲取一些模擬數(shù)據(jù)、模擬圖片時也可以使用它。
一、 getForObject() 方法
1.1.以String的方式接受請求結(jié)果數(shù)據(jù)
在Spring Boot環(huán)境下寫一個單元測試用例,以String類型接收響應結(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第二個參數(shù)為返回值的類型,String.class以字符串的形式接受getForObject響應結(jié)果,
1.2.以POJO對象的方式接受結(jié)果數(shù)據(jù)
在Spring Boot環(huán)境下寫一個單元測試用例,以java POJO對象接收響應結(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ù)組的方式接收請求結(jié)果
訪問http://jsonplaceholder.typicode.com/posts 可以獲得JSON數(shù)組方式的請求結(jié)果
下一步就是我們該如何接收,使用方法也很簡單。在Spring Boot環(huán)境下寫一個單元測試用例,以數(shù)組的方式接收請求結(jié)果。
@Test public void testArrays() { String url = "http://jsonplaceholder.typicode.com/posts"; PostDTO[] postDTOs = restTemplate.getForObject(url, PostDTO[].class); System.out.println("數(shù)組長度:" + postDTOs.length); }
請求的結(jié)果被以數(shù)組的方式正確接收,輸出如下:
數(shù)組長度:100
1.4.使用占位符號傳參的幾種方式
以下的幾個請求都是在訪問"http://jsonplaceholder.typicode.com/posts/1",只是使用了占位符語法,這樣在業(yè)務使用上更加靈活。
使用占位符的形式傳遞參數(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請求傳參方法,getForEntity都可以使用,使用方法上也幾乎是一致的,只是在返回結(jié)果接收的時候略有差別。使用ResponseEntity<T> responseEntity
來接收響應結(jié)果。用responseEntity.getBody()獲取響應體。響應體內(nèi)容同getForObject方法返回結(jié)果一致。剩下的這些響應信息就是getForEntity比getForObject多出來的內(nèi)容。
HttpStatus statusCode = responseEntity.getStatusCode();
獲取整體的響應狀態(tài)信息
int statusCodeValue = responseEntity.getStatusCodeValue();
獲取響應碼值
HttpHeaders headers = responseEntity.getHeaders();
獲取響應頭等
@Test public void testEntityPoJo() { String url = "http://jsonplaceholder.typicode.com/posts/5"; ResponseEntity<PostDTO> responseEntity = restTemplate.getForEntity(url, PostDTO.class); PostDTO postDTO = responseEntity.getBody(); // 獲取響應體 System.out.println("HTTP 響應body:" + postDTO.toString()); //以下是getForEntity比getForObject多出來的內(nèi)容 HttpStatus statusCode = responseEntity.getStatusCode(); // 獲取響應碼 int statusCodeValue = responseEntity.getStatusCodeValue(); // 獲取響應碼值 HttpHeaders headers = responseEntity.getHeaders(); // 獲取響應頭 System.out.println("HTTP 響應狀態(tài):" + statusCode); System.out.println("HTTP 響應狀態(tài)碼:" + statusCodeValue); System.out.println("HTTP Headers信息:" + headers); }
輸出打印結(jié)果
以上就是RestTemplate發(fā)送HTTP GET請求使用方法詳解的詳細內(nèi)容,更多關于RestTemplate發(fā)送HTTP GET請求用法的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot入門實現(xiàn)第一個SpringBoot項目
今天我們一起來完成一個簡單的SpringBoot(Hello World)。就把他作為你的第一個SpringBoot項目。具有一定的參考價值,感興趣的可以了解一下2021-09-09Java thread.isInterrupted() 返回值不確定結(jié)果分析解決
這篇文章主要介紹了Java thread.isInterrupted() 返回值不確定結(jié)果分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-12-12@Transactional注解:多個事務嵌套時,獨立事務處理方式
這篇文章主要介紹了@Transactional注解:多個事務嵌套時,獨立事務處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01Springboot詳解如何實現(xiàn)SQL注入過濾器過程
這篇文章主要介紹了基于springboot實現(xiàn)SQL注入過濾器,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2022-06-06