最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RestTemplate發(fā)送HTTP?POST請(qǐng)求使用方法詳解

 更新時(shí)間:2022年03月17日 09:28:14   作者:字母哥哥  
這篇文章主要為大家介紹了RestTemplate發(fā)送HTTP?POST請(qǐng)求的使用方法詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步

本文是精講RestTemplate第4篇,前篇的blog訪問地址如下:

RestTemplate在Spring或非Spring環(huán)境下使用精講

RestTemplate實(shí)現(xiàn)多種底層HTTP客戶端類庫(kù)的切換用法

RestTemplate發(fā)送HTTP GET請(qǐng)求使用方法詳解

在上一節(jié)為大家介紹了RestTemplate的GET請(qǐng)求的兩個(gè)方法:getForObject()和getForEntity()。其實(shí)POST請(qǐng)求方法和GET請(qǐng)求方法上大同小異,RestTemplate的POST請(qǐng)求也包含兩個(gè)主要方法:

postForObject()

postForEntity()

二者的主要區(qū)別在于,postForObject()返回值是HTTP協(xié)議的響應(yīng)體。postForEntity()返回的是ResponseEntity,ResponseEntity是對(duì)HTTP響應(yīng)的封裝,除了包含響應(yīng)體,還包含HTTP狀態(tài)碼、contentType、contentLength、Header等信息。

一、postForObject發(fā)送JSON格式請(qǐng)求

寫一個(gè)單元測(cè)試用例,測(cè)試用例的內(nèi)容是向指定的URL提交一個(gè)Post(帖子).

@SpringBootTest
class PostTests {
   @Resource
   private RestTemplate restTemplate;
   @Test
   void testSimple()  {
      // 請(qǐng)求地址
      String url = "http://jsonplaceholder.typicode.com/posts";
      // 要發(fā)送的數(shù)據(jù)對(duì)象
      PostDTO postDTO = new PostDTO();
      postDTO.setUserId(110);
      postDTO.setTitle("zimug 發(fā)布文章");
      postDTO.setBody("zimug 發(fā)布文章 測(cè)試內(nèi)容");
      // 發(fā)送post請(qǐng)求,并輸出結(jié)果
      PostDTO result = restTemplate.postForObject(url, postDTO, PostDTO.class);
      System.out.println(result);
   }
}

jsonplaceholder.typicode.com是一個(gè)可以提供在線免費(fèi)RESTful測(cè)試服務(wù)的一個(gè)網(wǎng)站”

/posts"服務(wù)接收PostDTO 參數(shù)對(duì)象,并將請(qǐng)求結(jié)果以JSON字符串的形式進(jìn)行響應(yīng)。響應(yīng)結(jié)果就是請(qǐng)求參數(shù)對(duì)象對(duì)應(yīng)的JSON字符串。

所以postForObject方法第二個(gè)參數(shù)是請(qǐng)求數(shù)據(jù)對(duì)象,第三個(gè)參數(shù)是返回值類型

最終將返回值的打印結(jié)果如下:

二、postForObject模擬表單數(shù)據(jù)提交

下面給大家寫一個(gè)使用postForObject模擬表單數(shù)據(jù)提交的例子,即:提交x-www-form-urlencoded格式的數(shù)據(jù)

@Test
public void testForm() {
   // 請(qǐng)求地址
   String url = "http://jsonplaceholder.typicode.com/posts";
   // 請(qǐng)求頭設(shè)置,x-www-form-urlencoded格式的數(shù)據(jù)
   HttpHeaders headers = new HttpHeaders();
   headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
   //提交參數(shù)設(shè)置
   MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
   map.add("title", "zimug 發(fā)布文章第二篇");
   map.add("body", "zimug 發(fā)布文章第二篇 測(cè)試內(nèi)容");
   // 組裝請(qǐng)求體
   HttpEntity<MultiValueMap<String, String>> request =
               new HttpEntity<MultiValueMap<String, String>>(map, headers);
   // 發(fā)送post請(qǐng)求,并打印結(jié)果,以String類型接收響應(yīng)結(jié)果JSON字符串
   String result = restTemplate.postForObject(url, request, String.class);
   System.out.println(result);
}

請(qǐng)求數(shù)據(jù)打印結(jié)果如下:

三、 url支持占位符語法

如果url地址上面需要傳遞一些動(dòng)態(tài)參數(shù),可以使用占位符的方式:

String url = "http://jsonplaceholder.typicode.com/{1}/{2}";
String url = "http://jsonplaceholder.typicode.com/{type}/{id}";

具體的用法和使用GET方法請(qǐng)求是一致的

所以請(qǐng)參考: RestTemplate發(fā)送HTTP GET請(qǐng)求使用方法詳解

四、postForEntity()方法

上面的所有的postForObject請(qǐng)求傳參方法,postForEntity都可以使用,使用方法上也幾乎是一致的,只是在返回結(jié)果接收的時(shí)候略有差別。

使用ResponseEntity<T> responseEntity來接收響應(yīng)結(jié)果。用responseEntity.getBody()獲取響應(yīng)體。響應(yīng)體內(nèi)容同postForObject方法返回結(jié)果一致。剩下的這些響應(yīng)信息就是postForEntity比postForObject多出來的內(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() {
   // 請(qǐng)求地址
   String url = "http://jsonplaceholder.typicode.com/posts";
   // 要發(fā)送的數(shù)據(jù)對(duì)象
   PostDTO postDTO = new PostDTO();
   postDTO.setUserId(110);
   postDTO.setTitle("zimug 發(fā)布文章");
   postDTO.setBody("zimug 發(fā)布文章 測(cè)試內(nèi)容");
   // 發(fā)送post請(qǐng)求,并輸出結(jié)果
   ResponseEntity<String> responseEntity
               = restTemplate.postForEntity(url, postDTO, String.class);
   String body = responseEntity.getBody(); // 獲取響應(yīng)體
   System.out.println("HTTP 響應(yīng)body:" + postDTO.toString());
   //以下是postForEntity比postForObject多出來的內(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é)果

五、postForLocation() 方法的使用

postForLocation的傳參的類型、個(gè)數(shù)、用法基本都和postForObject()或postForEntity()一致。和前兩者的唯一區(qū)別在于返回值是一個(gè)URI。該URI返回值體現(xiàn)的是:用于提交完成數(shù)據(jù)之后的頁面跳轉(zhuǎn),或數(shù)據(jù)提交完成之后的下一步數(shù)據(jù)操作URI。

@Test
public void testURI() {
   // 請(qǐng)求地址
   String url = "http://jsonplaceholder.typicode.com/posts";
   PostDTO postDTO = new PostDTO();
   postDTO.setUserId(110);
   postDTO.setTitle("zimug 發(fā)布文章");
   postDTO.setBody("zimug 發(fā)布文章 測(cè)試內(nèi)容");
   // 發(fā)送post請(qǐng)求,并輸出結(jié)果
   URI uri = restTemplate.postForLocation(url,postDTO);
   System.out.println(uri);
}

輸出結(jié)果如下,含義是:提交了post之后,該post的id是101,可以通過如下的連接去獲取數(shù)據(jù)。

以上就是RestTemplate發(fā)送HTTP POST請(qǐng)求使用方法詳解的詳細(xì)內(nèi)容,更多關(guān)于RestTemplate發(fā)送HTTP POST請(qǐng)求用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot+MyBatis進(jìn)行日志輸出參考示例

    Springboot+MyBatis進(jìn)行日志輸出參考示例

    這篇文章主要給大家介紹了關(guān)于Springboot+MyBatis進(jìn)行日志輸出的相關(guān)資料,在項(xiàng)目開發(fā)過程中,日志是必不可少的,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 里氏代換原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    里氏代換原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了里氏代換原則的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解Java注解教程及自定義注解

    詳解Java注解教程及自定義注解

    這篇文章主要為大家詳細(xì)介紹了Java注解教程及自定義注解,幫助大家更好地學(xué)習(xí)Java注解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java中的原子類詳解

    Java中的原子類詳解

    這篇文章主要介紹了Java中的原子類詳解,Java原子類是一種多線程編程中常用的工具,用于實(shí)現(xiàn)線程安全的操作,它們提供了一種原子性操作的機(jī)制,確保多個(gè)線程同時(shí)訪問共享變量時(shí)的數(shù)據(jù)一致性,需要的朋友可以參考下
    2023-10-10
  • 全面解析Java觀察者模式

    全面解析Java觀察者模式

    這篇文章主要幫助大家全面解析Java觀察者模式,了解java設(shè)計(jì)模式中的觀察者模式,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java中如何正確重寫equals方法

    Java中如何正確重寫equals方法

    Object類中equals方法比較的是兩個(gè)對(duì)象的引用地址,只有對(duì)象的引用地址指向同一個(gè)地址時(shí),才認(rèn)為這兩個(gè)地址是相等的,否則這兩個(gè)對(duì)象就不相等
    2021-10-10
  • Java中List add添加不同類型元素的講解

    Java中List add添加不同類型元素的講解

    今天小編就為大家分享一篇關(guān)于java的List add不同類型的對(duì)象,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 教你怎么使用Java實(shí)現(xiàn)WebSocket

    教你怎么使用Java實(shí)現(xiàn)WebSocket

    這篇文章主要介紹了教你怎么使用Java WebSocket,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot內(nèi)部外部配置文件加載順序解析

    SpringBoot內(nèi)部外部配置文件加載順序解析

    這篇文章主要介紹了SpringBoot內(nèi)部外部配置文件加載順序解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java8中Optional的使用方法詳解

    Java8中Optional的使用方法詳解

    這篇文章主要介紹了Java8中Optional的使用方法詳解,傳統(tǒng)的寫代碼方式經(jīng)常會(huì)遇到NullPointerException,這就需要我們?cè)诖a中經(jīng)常判空,而判空的寫法又會(huì)顯得很累贅,這里就可以用到Optional來簡(jiǎn)化代碼,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

庄浪县| 四会市| 东源县| 巴楚县| 景泰县| 宣汉县| 易门县| 垫江县| 花莲县| 博客| 溧阳市| 罗平县| 炉霍县| 合山市| 宣威市| 龙川县| 鹤山市| 辰溪县| 双流县| 西平县| 杂多县| 吉林省| 昌黎县| 潞城市| 拉萨市| 延吉市| 海门市| 商丘市| 曲周县| 桃园县| 临夏县| 甘泉县| 永丰县| 吴桥县| 三台县| 南皮县| 桃源县| 玉屏| 东乌珠穆沁旗| 敦煌市| 潮安县|