日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Spring RestTemplate基本使用介紹

瀏覽:46日期:2023-09-15 10:31:16

  上篇文件介紹Eureka服務的文章中,我們介紹到consumer從Eureka中通過LoadBalancerClient獲取到服務端地址信息后通過RestTemplate來遠程調用服務的場景,本文來具體介紹下RestTemplate的使用

RestTemplate

  SpringRestTemplate是Spring 提供的用于訪問 Rest 服務的客端, RestTemplate提供了多種便捷訪問遠程Http服務的方法,能夠大大提高客戶端的編寫效率,所以很多客戶端比如Android或者第三方服務商都是使用RestTemplate 請求 restful服務

1.環境搭建

  為了演示RestTemplate的使用,我們創建兩個SpringBoot項目,一個provider作為server端,一個consumer作為服務調用方法

Spring RestTemplate基本使用介紹

2.API方法介紹

API 說明 getForEntity() 發送一個HTTP GET請求,返回的ResponseEntity包含了響應體所映射成的對象 getForObject() 發送一個HTTP GET請求,返回的請求體將映射為一個對象 postForEntity() POST 數據到一個URL,返回包含一個對象的ResponseEntity,這個對象是從響應體中映射得到的 postForObject() POST 數據到一個URL,返回根據響應體匹配形成的對象 headForHeaders() 發送HTTP HEAD請求,返回包含特定資源URL的HTTP頭 optionsForAllow() 發送HTTP OPTIONS請求,返回對特定URL的Allow頭信息 postForLocation() POST 數據到一個URL,返回新創建資源的URL put() PUT 資源到特定的URL delete() 在特定的URL上對資源執行HTTP DELETE操作 exchange() 在URL上執行特定的HTTP方法,返回包含對象的ResponseEntity,這個對象是從響應體中映射得到的 execute() 在URL上執行特定的HTTP方法,返回一個從響應體映射得到的對象

3.具體使用

  我們通過常用的http協議的四種請求方式來看下效果

3.1 無參請求

  我們先來看下服務端請求方法不需要接收參數,

getForEntity

  通過getForEntity來實現

服務端

/** * 無參,返回字符串 * @return */ @GetMapping('/server1') public String server1String(){ System.out.println('服務端被訪問了...'); return 'success'; }

調用

/** * RestTemplate 訪問 provider的第一個服務 server1 */@Testpublic void contextLoads() { String url = 'http://localhost:8080/server1'; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class); // 獲取響應的狀態 HttpStatus statusCode = entity.getStatusCode(); // 獲取響應的header信息 HttpHeaders headers = entity.getHeaders(); // 獲取響應的body信息 String msg = entity.getBody(); System.out.println(statusCode); System.out.println(headers); System.out.println(msg);}

輸出結果

Spring RestTemplate基本使用介紹

說明:

1.getForEntity()方法執行返回的類型是ResponseEntity<T>,ResponseEntity<T>是Spring對HTTP請求響應的封裝,包括了幾個重要的元素,如響應碼、contentType、contentLength、響應消息體等,在輸出結果中我們能夠看到2.getForEntity()的參數中第一個是請求地址,第二個是T對應的類型

getForObject

  getForObject函數實際上是對getForEntity函數的進一步封裝,如果你只關注返回的消息體的內容,對其他信息都不關注,此時可以使用getForObject

/** * getForObject 訪問 */@Testpublic void contextLoadsObject() { String url = 'http://localhost:8080/server1'; RestTemplate restTemplate = new RestTemplate(); // 直接返回的就是我們需要的結果,但是獲取不到對應的響應狀態等信息 String msg = restTemplate.getForObject(url,String.class); System.out.println(msg);}

3.2 有參請求

服務端方法需要接收調用者傳遞的參數

/** * 有參,基本數據類型 返回字符串 * @return */ @RequestMapping('/server2') public String server2String(Integer id,String userName){ System.out.println('服務端被訪問了...'+id+' '+userName); return 'success--參數得到了'; } /** * 有參,基本數據類型 返回字符串 * @return */ @RequestMapping('/server3') public String server3String(User user){ System.out.println('服務端被訪問了...'+user); return 'success--參數得到了'; }

getForEntity

調用者可以通過兩種方式調用第一種方式通過數字占位符,最后是一個可變長度的參數,來一一替換前面的占位符

/*** 請求服務并且傳遞參數* 基本數據類型*/@Testpublic void testServer2(){// 參數在鏈接地址后 String url = 'http://localhost:8080/server2?id={1}&userName={2}'; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class,5,'bobo'); System.out.println(entity.getBody());}

第二種就是使用name={name}這種形式,最后一個參數是一個map,map的key即為前邊占位符的名字,map的value為參數值

/** * 請求服務并且傳遞參數 * 基本數據類型 */@Testpublic void testServer3(){ String url = 'http://localhost:8080/server2?id={id}&userName={userName}'; Map<String,Object> map = new HashMap<>(); map.put('id',6); map.put('userName','波波烤鴨'); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> entity = restTemplate.getForEntity(url, String.class,map); System.out.println(entity.getBody());}

postForEntity

  如果是post方式提交請求傳遞參數我們可以這樣使用,如下

服務端:注意要加@RequestBody注解

/** * 有參,基本數據類型 返回字符串 * @return */@RequestMapping('/server3')public String server3String(@RequestBody User user){ System.out.println('服務端被訪問了...'+user); return 'success--參數得到了';}

客戶端

/** * postForEntity(url,user,String.class) * url:請求地址 * user:請求提交的數據 * String.class 接收返回數據的類型 */@Testpublic void contextLoadsObject1() { String url = 'http://localhost:8080/server3'; RestTemplate restTemplate = new RestTemplate(); User user = new User(1,'bobo','中國'); // 直接返回的就是我們需要的結果,但是獲取不到對應的響應狀態等信息 String msg = restTemplate.postForEntity(url,user,String.class).getBody(); System.out.println(msg);}

3.3 返回自己類型

服務端返回的我們自定義類型的數據

/** * 返回自定義對象 * @return */ @RequestMapping('/server4') public User server4Object(){ System.out.println('服務端被訪問了...'); return new User(2,'李四','深圳'); }

客戶端:

/** * 返回類型為自定義類型 */@Testpublic void testServer5(){ String url = 'http://localhost:8080/server4'; RestTemplate restTemplate = new RestTemplate(); ResponseEntity<User> entity = restTemplate.getForEntity(url, User.class); System.out.println(entity.getBody());}

使用getForEntity和getForObject及postForEntity和postForObject都差不多,注意接收的類型即可。

3.4 返回的list帶泛型的場景

此處我們需要使用到exchange方法,特定如下

允許調用者指定HTTP請求的方法(GET,POST,PUT等) 可以在請求中增加body以及頭信息,其內容通過參‘HttpEntity<?>requestEntity’描述 exchange支持‘含參數的類型’(即泛型類)作為返回類型,該特性通過‘ParameterizedTypeReferenceresponseType’描述

客戶端調用

/** * 返回 集合帶泛型 * @return */@RequestMapping('/server5')public List<User> server5List(){ System.out.println('服務端被訪問了...'); return Arrays.asList(new User(2,'李四1','深圳') ,new User(3,'李四2','深圳') ,new User(4,'李四3','深圳'));}

Spring RestTemplate基本使用介紹

好了~RestTemplate的基本使用我們就介紹到此處,更多相關Spring RestTemplate使用內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
水蜜桃久久夜色精品一区| 亚洲一区国产一区| 999久久久91| 国产精品sm| 日韩欧美2区| 成人在线超碰| 精品中国亚洲| 伊人成人网在线看| 欧美日韩亚洲一区| 成人自拍av| 亚洲三区欧美一区国产二区| 激情五月综合网| 在线视频精品| 欧美1区2区3区| 国产丝袜一区| 日本电影久久久| 亚洲中午字幕| 日韩专区精品| 在线手机中文字幕| 精品一区毛片| 日韩国产欧美在线播放| 欧美 日韩 国产一区二区在线视频| 欧美激情福利| 一区二区三区网站| 日韩欧美一区二区三区免费看| 亚洲啊v在线| 精品一区二区三区的国产在线观看| 国产一区二区三区日韩精品| 午夜亚洲福利| 天堂成人国产精品一区| 日韩欧美激情| 国产精品一区二区av日韩在线| 日本va欧美va瓶| 亚洲理论在线| 久久一区亚洲| 午夜久久影院| 日韩精品亚洲专区| 国产色噜噜噜91在线精品 | 蜜桃久久精品一区二区| 一本一道久久a久久精品蜜桃| 日韩中文字幕不卡| 免费一区二区三区在线视频| 久久av影视| av免费不卡国产观看| 国产精品美女久久久久久不卡| 久久亚洲精品中文字幕蜜潮电影| 精品国产成人| 久久国产福利| 美女精品一区二区| 久久性天堂网| 亚洲二区在线| 国产精品天天看天天狠| 香蕉精品久久| 女生影院久久| 国产精品毛片视频| 人人爽香蕉精品| 日韩电影免费网址| 亚洲影视一区| 九九精品调教| 欧美韩日一区| 国产亚洲欧美日韩在线观看一区二区 | 欧美精品中文字幕亚洲专区| 亚洲免费成人av在线| 国内精品美女在线观看| 亚洲精品免费观看| 久久久久久久久99精品大| 麻豆精品av| 国产精品一区二区av日韩在线| 国产精品久久久免费| 一级欧美视频| 黄色亚洲在线| 国产亚洲一区二区手机在线观看| 亚洲日产av中文字幕| 日韩高清二区| 石原莉奈在线亚洲三区| 国产综合色产| 久久国产日韩| 久久男人天堂| 最新国产拍偷乱拍精品| 国产不卡一区| 欧美激情亚洲| 国产日韩免费| 蜜臀av国产精品久久久久 | 成人羞羞视频播放网站| 欧美日韩精品一区二区三区在线观看| 美腿丝袜在线亚洲一区| 国产日韩在线观看视频| 啪啪亚洲精品| 青青草精品视频| 国产精品白丝久久av网站| 久久男人av| 黄色aa久久| 日本一二区不卡| 亚洲少妇在线| 精品视频高潮| 亚洲人成网77777色在线播放 | 日韩区欧美区| 国产精品久久乐| 一本综合精品| 精品国产99| 国产日韩欧美中文在线| 日韩视频一区| 色天使综合视频| 高清在线一区| 97se综合| 国产在线一区不卡| 欧美一区网站| 午夜国产一区二区| 日韩国产专区| 精品视频网站| 日韩精品a在线观看91| 日韩一级精品| 亚洲天堂久久| 精品视频自拍| 色一区二区三区四区| 国产探花一区| 国产精品毛片aⅴ一区二区三区| 日本一二区不卡| 国产精品magnet| 欧美在线综合| 日韩精品一二三| 蜜桃久久av一区| 国产精品videossex久久发布| sm久久捆绑调教精品一区| 精品视频自拍| 国产精品色婷婷在线观看| 97精品久久| 一区二区精品| 国产欧美一区二区精品久久久 | 精品日韩毛片| 国产视频一区二| 精品一区av| 欧美日中文字幕| 久久久777| 亚洲激情不卡| 国产精品久久久久久久久久白浆| 亚洲欧美久久久| 欧美一级二级视频| 鲁大师精品99久久久| 欧美1区2区3| 日韩久久视频| 丝袜美腿高跟呻吟高潮一区| 日本中文字幕一区二区视频| 国产精品极品国产中出| 欧美日韩91| 亚洲福利免费| 麻豆中文一区二区| 四季av一区二区凹凸精品| 丁香六月综合| 制服诱惑一区二区| 久久av日韩| 久久久久99| 色综合视频一区二区三区日韩| 国产精品xxx在线观看| 欧美有码在线| 精品淫伦v久久水蜜桃| 日韩在线免费| 免费精品视频在线| 久久精品色播| 久久午夜影视| 在线天堂资源www在线污| 性一交一乱一区二区洋洋av| 狠狠久久伊人| 亚洲另类视频| 精品伊人久久| 奇米狠狠一区二区三区| av资源新版天堂在线| 亚洲影视一区二区三区| 国产亚洲永久域名| 中文字幕av一区二区三区四区| 蜜桃91丨九色丨蝌蚪91桃色| 97欧美在线视频| 青草久久视频| 99re国产精品| 91精品国产乱码久久久久久久 | jizzjizz中国精品麻豆| 午夜在线视频观看日韩17c| 欧美日韩夜夜| 99成人在线| 久久久久国产精品一区二区| 国产精品主播在线观看| 男女性色大片免费观看一区二区| 影院欧美亚洲| 久久美女精品| 神马日本精品| 成人美女视频| 国产精品三级| 国产精品一区二区三区美女| 亚洲一区中文| 不卡在线一区二区| 电影天堂国产精品| 国产拍在线视频| 久久久久免费| 亚洲精品乱码日韩| 快she精品国产999| 蜜桃av一区二区| 久久久精品午夜少妇| 色欧美自拍视频| 麻豆中文一区二区| 国产精品一区二区中文字幕|