RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講
本文是精講RestTemplate第5篇,前篇的blog訪問地址如下:
RestTemplate在Spring或非Spring環(huán)境下使用精講
RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫(kù)的切換用法
RestTemplate發(fā)送HTTP GET請(qǐng)求使用方法詳解
RestTemplate發(fā)送HTTP POST請(qǐng)求使用方法詳解
為了方便后續(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í)也可以使用它。
一、RESTful風(fēng)格與HTTP method
熟悉RESTful風(fēng)格的朋友,應(yīng)該了解RESTful風(fēng)格API使用HTTP method表達(dá)對(duì)資源的操作。
| 常用HTTP方法 | RESTful風(fēng)格語義(操作) |
|---|---|
| GET | 查詢、獲取數(shù)據(jù) |
| POST | 新增、提交數(shù)據(jù) |
| DELETE | 刪除數(shù)據(jù) |
| PUT | 更新、修改數(shù)據(jù) |
| HEAD | 獲取HTTP請(qǐng)求頭數(shù)據(jù) |
| OPTIONS | 判斷URL提供的當(dāng)前API支持哪些HTTP method方法 |
在前面的章節(jié),我已經(jīng)為大家詳細(xì)的介紹了RestTemplate的GET和POST的相關(guān)的使用方法,本節(jié)來為大家介紹DELETE、PUT、HEAD、OPTIONS。
二、使用 DELETE方法去刪除資源
刪除一個(gè)已經(jīng)存在的資源,使用RestTemplate的delete(uri)方法。該方法會(huì)向URL代表的資源發(fā)送一個(gè)HTTP DELETE方法請(qǐng)求。
@Test
void testDelete() {
String url = "http://jsonplaceholder.typicode.com/posts/1";
restTemplate.delete(url);
}
在前面章節(jié)測(cè)試類的基礎(chǔ)上,寫如上代碼的測(cè)試用例。上面代碼含義為刪除posts列表里面的第1個(gè)帖子。
三、使用PUT方法去修改資源
修改一個(gè)已經(jīng)存在的資源,使用RestTemplate的put()方法。該方法會(huì)向URL代表的資源發(fā)送一個(gè)HTTP PUT方法請(qǐng)求。
@Test
void testPut() {
// 請(qǐng)求地址
String url = "http://jsonplaceholder.typicode.com/posts/1";
// 要發(fā)送的數(shù)據(jù)對(duì)象(修改數(shù)據(jù))
PostDTO postDTO = new PostDTO();
postDTO.setUserId(110);
postDTO.setTitle("zimug 發(fā)布文章");
postDTO.setBody("zimug 發(fā)布文章 測(cè)試內(nèi)容");
// 發(fā)送PUT請(qǐng)求
restTemplate.put(url, postDTO);
}
上面代碼RESTful風(fēng)格語義是:修改posts列表里面的第1個(gè)帖子。
三、通用請(qǐng)求方法exchange方法
exchange方法是一個(gè)通用的方法,它可以發(fā)送GET、POST、DELETE、PUT等等HTTP方法請(qǐng)求。
下面的兩種方式發(fā)送GET請(qǐng)求效果是一樣的
//使用getForEntity發(fā)送GET請(qǐng)求
ResponseEntity<PostDTO> responseEntity
= restTemplate.getForEntity(url, PostDTO.class);
//使用exchange發(fā)送GET請(qǐng)求
ResponseEntity<PostDTO> responseEntity = restTemplate.exchange(url, HttpMethod.GET,
null, PostDTO.class);
下面的兩種方式發(fā)送POST請(qǐng)求效果是一樣的
// 使用postForEntity發(fā)送POST請(qǐng)求
ResponseEntity<String> responseEntity
= restTemplate.postForEntity(url, postDTO, String.class);
// 使用exchange發(fā)送POST請(qǐng)求
ResponseEntity<String> responseEntity
= restTemplate.exchange(url, HttpMethod.POST,null, String.class);
下面的兩種方式發(fā)送DELETE請(qǐng)求效果是一樣的,只是一個(gè)有返回值,一個(gè)返回值為void
// 使用delete發(fā)送DELETE請(qǐng)求,返回值為void restTemplate.delete(url); // 使用exchange發(fā)送DELETE請(qǐng)求 ResponseEntity<String> result = restTemplate.exchange(url, HttpMethod.DELETE,null,String.class);
上面為大家舉了幾個(gè)用exchange()發(fā)送請(qǐng)求的例子,exchange()還能針對(duì)很多的HTTP method類型發(fā)送請(qǐng)求,是通用方法!
四、使用HEAD方法獲取HTTP請(qǐng)求頭數(shù)據(jù)
使用*headForHeaders()*API 獲取某個(gè)資源的URI的請(qǐng)求頭信息,并且只專注于獲取HTTP請(qǐng)求頭信息。
@Test
public void testHEAD() {
String url = "http://jsonplaceholder.typicode.com/posts/1";
HttpHeaders httpHeaders = restTemplate.headForHeaders(url);
//斷言該資源接口數(shù)據(jù)為JSON類型
assertTrue(httpHeaders.getContentType()
.includes(MediaType.APPLICATION_JSON));
System.out.println(httpHeaders);
}
請(qǐng)求頭信息輸出打印結(jié)果如下

五、使用OPTIONS獲取HTTP資源支持的method
下文代碼使用optionsForAllow測(cè)試該URL資源是否支持GET、POST、PUT、DELETE,即增刪改查。
@Test
public void testOPTIONS() {
String url = "http://jsonplaceholder.typicode.com/posts/1";
Set<HttpMethod> optionsForAllow = restTemplate.optionsForAllow(url);
HttpMethod[] supportedMethods
= {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE};
//測(cè)試該url資源是否支持GET、POST、PUT、DELETE,即增刪改查
assertTrue(optionsForAllow.containsAll(Arrays.asList(supportedMethods)));
}
以上就是RestTemplate的DELETE及PUT等請(qǐng)求方法使用精講的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate的DELETE及PUT等請(qǐng)求用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
springboot使用redis實(shí)現(xiàn)從配置到實(shí)戰(zhàn)
本文主要介紹了springboot使用redis ,采用的是RedisTemplate的形式,還有一種采用spring支持的注解進(jìn)行訪問緩存,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in)
這篇文章主要介紹了Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
詳解spring boot jpa整合QueryDSL來簡(jiǎn)化復(fù)雜操作
這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來簡(jiǎn)化復(fù)雜操作,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Java實(shí)現(xiàn)上傳Excel文件并導(dǎo)入數(shù)據(jù)庫(kù)
這篇文章主要介紹了在java的基礎(chǔ)上學(xué)習(xí)上傳Excel文件并導(dǎo)出到數(shù)據(jù)庫(kù),感興趣的小伙伴不要錯(cuò)過奧2021-09-09
Java編程之多線程死鎖與線程間通信簡(jiǎn)單實(shí)現(xiàn)代碼
這篇文章主要介紹了Java編程之多線程死鎖與線程間通信簡(jiǎn)單實(shí)現(xiàn)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10
Java實(shí)現(xiàn)單鏈表SingleLinkedList增刪改查及反轉(zhuǎn) 逆序等
單鏈表是鏈表的其中一種基本結(jié)構(gòu)。一個(gè)最簡(jiǎn)單的結(jié)點(diǎn)結(jié)構(gòu)如圖所示,它是構(gòu)成單鏈表的基本結(jié)點(diǎn)結(jié)構(gòu)。在結(jié)點(diǎn)中數(shù)據(jù)域用來存儲(chǔ)數(shù)據(jù)元素,指針域用于指向下一個(gè)具有相同結(jié)構(gòu)的結(jié)點(diǎn)。 因?yàn)橹挥幸粋€(gè)指針結(jié)點(diǎn),稱為單鏈表2021-10-10

