本文是精講響應式WebClient第3篇,前篇的blog訪問地址以下:html
熟悉RESTful風格的朋友,應該瞭解RESTful風格API使用HTTP method表達對資源的操做。vue
經常使用HTTP方法 | RESTful風格語義(操做) |
---|---|
GET | 查詢、獲取數據 |
POST | 新增、提交數據 |
DELETE | 刪除數據 |
PUT | 更新、修改數據 |
在上一篇文章中咱們已經爲你們介紹瞭如何使用WebClient做爲Http客戶端發送GET請求與進行響應結果的接收。本節來爲你們介紹POST、DELETE、PUT。java
POST等其餘的方法在與GET方法在使用以下方法的時候是一致的:web
因此想了解以上信息,請去參考: 精講響應式WebClient第2篇-GET請求阻塞與非阻塞調用方法詳解。 本文只介紹POST、DELETE、PUT在使用過程當中與GET不同的地方。spring
爲了方便後續開發測試,首先介紹一個網站給你們。 JSONPlaceholder是一個提供免費的在線REST API的網站,咱們在開發時可使用它提供的url地址測試下網絡請求以及請求參數。或者當咱們程序須要獲取一些模擬數據、模擬圖片時也可使用它。
public class OtherTest { //建立webClient private WebClient webClient = WebClient.builder() .baseUrl("http://jsonplaceholder.typicode.com") .build(); @Test public void testPostJsonStr() { // 提交給服務端的JSON字符串 String jsonStr = "{\"userId\": 1,\"title\": \"zimugtest\",\"body\": \"字母哥進行測試\"}"; // 發送請求 Mono<String> mono = webClient .post() // POST 請求 .uri("/posts") // 請求路徑 .contentType(MediaType.APPLICATION_JSON) //JSON數據類型 .body(BodyInserters.fromValue(jsonStr)) //JSON字符串數據 .retrieve() // 獲取響應體 .bodyToMono(String.class); //響應數據類型轉換 // 輸出結果 System.out.println(mono.block()); } }
響應結果打印以下,"http://jsonplaceholder.typicode.com/posts/1" 服務的請求數據就是響應數據。響應結果一樣是一個JSON字符串:json
@Test public void testPostJson() { //構建請求發送對象 PostDTO postDTO = new PostDTO(); postDTO.setUserId(110); postDTO.setTitle("zimug-test"); postDTO.setBody("字母哥進行Post測試"); //發送請求 Mono<PostDTO> mono = webClient .post() // 發送POST 請求 .uri("/posts") //服務請求路徑,基於baseurl .contentType(MediaType.APPLICATION_JSON) //以JSON數據格式 .bodyValue(postDTO) //發送請求體,對象形式 .retrieve() // 獲取響應體 .bodyToMono(PostDTO.class); //響應數據類型轉換 // 輸出結果 System.out.println("=====" + mono.block()); }
響應結果打印以下,使用PostDTO接收響應結果。由於 "http://jsonplaceholder.typicode.com/posts/1" 服務的請求數據就是響應數據。打印結果是PostDTO對象的toString()方法後端
@Test public void testFormSubmit() { //表單數據參數設置 MultiValueMap<String, String> map = new LinkedMultiValueMap<>(); map.add("title", "zimug-test"); map.add("body", "字母哥進行測試"); // 發送請求 Mono<String> mono = webClient .post() // 發送POST 請求 .uri("/posts") // 請求路徑 .contentType(MediaType.APPLICATION_FORM_URLENCODED) //表單數據類型 .body(BodyInserters.fromFormData(map)) //表單數據 .retrieve() // 獲取響應體 .bodyToMono(String.class); //響應數據類型轉換 // 輸出結果 System.out.println(mono.block()); } }
由於使用字符串的方式接受響應結果,因此輸出和《2.1.使用Post方法向服務端發送JSON字符串數據》輸出結果是同樣的。springboot
刪除一個已經存在的資源,使用webClient的delete()方法。該方法會向URL表明的資源發送一個HTTP DELETE方法請求。cookie
@Test public void testDelete() { // 發送Delete請求 webClient.delete().uri("/posts/1"); // 請求路徑 }
在前面章節測試類的基礎上,寫如上代碼的測試用例。上面代碼含義爲刪除posts列表裏面的第1個帖子。網絡
修改一個已經存在的資源,使用webClient的put()方法。該方法會向URL表明的資源發送一個HTTP PUT方法請求。
@Test public void testPut() { //要修改的數據對象 PostDTO postDTO = new PostDTO(); postDTO.setId(1); postDTO.setBody("字母哥進行Put測試"); Mono<PostDTO> mono = webClient .put() .uri("/posts/1") //服務請求路徑,基於baseurl .contentType(MediaType.APPLICATION_JSON) .bodyValue(postDTO) //發送請求體 .retrieve() // 獲取響應體 .bodyToMono(PostDTO.class); //響應數據類型轉換 // 輸出結果 System.out.println("=====" + mono.block()); }
上面代碼RESTful風格語義是:修改posts列表裏面的第1個帖子。輸出結果以下,是修改數據以後的結果:
以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。