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

spring boot中使用http請求的示例代碼

 更新時間:2017年12月08日 09:15:50   作者:薛定諤的貓!  
本篇文章主要介紹了spring boot中 使用http請求的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

因為項目需求,需要兩個系統(tǒng)之間進行通信,經(jīng)過一番調(diào)研,決定使用http請求。

服務(wù)端沒有什么好說的,本來就是使用web 頁面進行訪問的,所以spring boot啟動后,controller層的接口就自動暴露出來了,客戶端通過調(diào)用對應(yīng)的url即可,所以這里主要就客戶端。

首先我自定義了一個用來處理http 請求的工具類DeviceFactoryHttp,既然是url訪問,那就有兩個問題需要處理,一個請求服務(wù)的url,和請求服務(wù)端的參數(shù),客戶端的消息頭請求服務(wù)的url:請求服務(wù)端url我定義的是跟客戶端一個樣的url服務(wù)端的參數(shù):服務(wù)端的參數(shù)有兩種一種經(jīng)過封裝的,類似下面這樣:

 http://localhost:8080/switch/getAllStatus?data{"interface name”:”getAllStudentStaus”}

一種是沒有經(jīng)過封裝的,類似下面這樣:

 http://localhost:8080/switch/getStudentInfoByName?name=zhangSan

首先是經(jīng)過封裝:

一:初始化httpclient

private static HttpClient client = null; 
static { 
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); 
cm.setMaxTotal(128);
cm.setDefaultMaxPerRoute(128);
client = HttpClients.custom().setConnectionManager(cm).build(); 
}

二:獲取請求的url,因為我服務(wù)端定義的url與客戶端一樣,所以我直接使用請求客戶端的url

//根據(jù)request獲取請求的url
public StringBuffer getUrlToRequest(HttpServletRequest request) { 
StringBuffer url=request.getRequestURL();//獲取請求的url(http://localhost:8080/switch/getStudentInfoByName) 
String[] splitArr=url.toString().split("/"); 
String appName=splitArr[3];//項目名稱 
String ipReport=splitArr[2];//項目ip:report 
String resultStr=url.toString().replaceAll(appName,DevFacConstans.facname).replaceAll(ipReport, DevFacConstans.ip+":"+DevFacConstans.report); 
return new StringBuffer(resultStr); 
}

獲取url根據(jù)/ 進行split,因為我這是測試環(huán)境,生產(chǎn)環(huán)境ip,端口號(域名)肯定不是localhost,有的前面還會加上項目名稱,所以我split對應(yīng)的值來進行替換。

三:拼裝請求參數(shù),調(diào)用http請求

/**
* 發(fā)送http請求 有request
* 給controller層調(diào)用
* @param request 
* @return 
*/
public String sendHttpToDevFac(HttpServletRequest request)throws Exception { 
HttpClient client = null; 
String returnResult=""; 
// http://localhost:8080/leo/1.0/h5/login 
StringBuffer urlBuffer=getUrlToRequest(request);//調(diào)用第二步,獲取url 
//獲取參數(shù)并拼裝
String dataAsJson = request.getParameter("data"); 
String encoderData=URLEncoder.encode(dataAsJson,"utf-8"); 
HttpGet get=new HttpGet(urlBuffer.append("?data=").append(encoderData).toString()); 
//set headers
Enumeration<String> headerNames=request.getHeaderNames(); 
while(headerNames.hasMoreElements()) {
String headerName=headerNames.nextElement(); 
String headerValue=request.getHeader(headerName); 
get.setHeader(headerName, headerValue); 
}
client=DeviceFactoryHttp.client;
logger.info("開始調(diào)用http請求,請求url:"+urlBuffer.toString());
HttpResponse rep=client.execute(get); 
returnResult=EntityUtils.toString(rep.getEntity(),"utf-8");
logger.info("http 請求調(diào)用結(jié)束!!");
return returnResult; 
}

先獲取請求的參數(shù),再將參數(shù)拼裝在url后面,URLEncoder.encode 這個不要忘了,因為參數(shù)會有一些符號,需要對參數(shù)進行編碼后再加入url,否則就會拋出異常,set headers:因為有部分信息服務(wù)端會從請求頭中取出,所以我將客戶端的請求頭也set到服務(wù)端的request中,請求的url和請求的參數(shù)拼好就就可以client.exceute(get)執(zhí)行請求了。

上面的是我瀏覽器直接將request請求作為參數(shù)傳到我客戶端,我所以我可以直接從request中獲取url,有的是沒有request,就需要從request的上下文環(huán)境中取了。

沒有經(jīng)過封裝的:

首先從上下文中獲取request的

/**
* 獲取request
* @return 
*/
public static HttpServletRequest getRequest(){ 
 ServletRequestAttributes ra= (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); 
 HttpServletRequest request = ra.getRequest(); 
 return request; 
}

二:有了request后,就有了url,下面再來解析請求參數(shù),因為這個參數(shù)是沒有封裝的,所以獲取所有的請求參數(shù)

/**
 * 沒有request 請求,給controller層調(diào)用
 * @param key
 * @param interfaceName
 * @param strings
 * @return
 * @throws Exception
 */
 public String centerToDeviceFacNoRequest(String key,String interfaceName)throws Exception {
 try {
  HttpServletRequest request=getRequest();//上面第一步,從上下文中獲取url
  //獲取reuquest請求參數(shù)
  Enumeration<String> names= request.getParameterNames();
  Map<String,String>paramMap=new HashMap<>();
  //遍歷請求map
  while(names.hasMoreElements()) {
   String name=names.nextElement();
   String value=(String) request.getParameter(name);
   paramMap.put(name, value);
  }
  //調(diào)用發(fā)送http請求的方法
  return sendHttpToDevFacNoData(paramMap,request);
 } catch (Exception e) {
  e.printStackTrace();
 }
 //end
 return null;
 }

三:發(fā)送http請求

/**
 * 發(fā)送http請求,【沒有data數(shù)據(jù)的】
 * @return
 */
 public String sendHttpToDevFacNoData(Map<String,String>paramMap,HttpServletRequest request)throws Exception {
 HttpClient client = null;
 String result="";
 StringBuffer dataBuffer=getUrlToRequest(request);//獲取url
 dataBuffer.append("?");
 client=DeviceFactoryHttp.client;
 Iterator<Entry<String, String>> paamIt=paramMap.entrySet().iterator();
 while(paamIt.hasNext()) {
  Entry<String, String> entry=paamIt.next();
  dataBuffer.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
 }
 String resultUrl=dataBuffer.toString().substring(0, dataBuffer.toString().lastIndexOf("&"));
 //發(fā)送請求
 HttpGet get=new HttpGet(resultUrl);
 //set headers
 Enumeration<String> headerNames=request.getHeaderNames();
 while(headerNames.hasMoreElements()) {
  String headerName=headerNames.nextElement();
  String headerValue=request.getHeader(headerName);
  get.setHeader(headerName, headerValue);
 }

 HttpResponse rep=client.execute(get);
 logger.info("開始調(diào)用http請求,請求url:"+resultUrl);
 //返回結(jié)果
 result=EntityUtils.toString(rep.getEntity(),"utf-8");
 logger.info(" http 請求調(diào)用結(jié)束!!");
 return result;
 } 

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot掃碼登錄的簡單實現(xiàn)

    springboot掃碼登錄的簡單實現(xiàn)

    本文主要介紹基于SpringBoot + Vue + Android實現(xiàn)的掃碼登錄,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 淺談byte和長度為8的boolean數(shù)組互相轉(zhuǎn)換

    淺談byte和長度為8的boolean數(shù)組互相轉(zhuǎn)換

    下面小編就為大家?guī)硪黄獪\談byte和長度為8的boolean數(shù)組互相轉(zhuǎn)換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • java貪吃蛇游戲編寫代碼

    java貪吃蛇游戲編寫代碼

    這篇文章主要為大家詳細介紹了java貪吃蛇游戲的編寫代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • SpringBoot Admin健康檢查功能的實現(xiàn)

    SpringBoot Admin健康檢查功能的實現(xiàn)

    admin主要就是告訴運維人員,服務(wù)出現(xiàn)異常,然后進行通知(微信、郵件、短信、釘釘?shù)龋┛梢苑浅?焖偻ㄖ竭\維人員,相當報警功能,接下來通過本文給大家介紹SpringBoot Admin健康檢查的相關(guān)知識,一起看看吧
    2021-06-06
  • 解決nacos升級spring cloud 2020.0無法使用bootstrap.yml的問題

    解決nacos升級spring cloud 2020.0無法使用bootstrap.yml的問題

    這篇文章主要介紹了解決nacos升級spring cloud 2020.0無法使用bootstrap.yml的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot數(shù)據(jù)庫查詢超時配置詳解

    SpringBoot數(shù)據(jù)庫查詢超時配置詳解

    這篇文章主要介紹了SpringBoot數(shù)據(jù)庫查詢超時配置,超時配置可以避免長時間占用數(shù)據(jù)庫連接,提高系統(tǒng)的響應(yīng)速度和吞吐量,還可以快速的反饋可以提升用戶體驗,避免用戶因長時間等待而感到挫敗,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-11-11
  • 淺試仿?mapstruct實現(xiàn)微服務(wù)編排框架詳解

    淺試仿?mapstruct實現(xiàn)微服務(wù)編排框架詳解

    這篇文章主要為大家介紹了淺試仿?mapstruct實現(xiàn)微服務(wù)編排框架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之哈希算法實現(xiàn)

    Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之哈希算法實現(xiàn)

    哈希表本質(zhì)是一種(key,value)結(jié)構(gòu),由此我們可以聯(lián)想到,能不能把哈希表的key映射成數(shù)組的索引index呢?如果這樣做的話那么查詢相當于直接查詢索引,查詢時間復(fù)雜度為O(1),其實這也正是當key為int型時的做法,將key通過某種做法映射成index,從而轉(zhuǎn)換成數(shù)組結(jié)構(gòu)
    2022-02-02
  • Java如何使用流去除集合中某個字段為空的對象

    Java如何使用流去除集合中某個字段為空的對象

    這篇文章主要給大家介紹了關(guān)于Java如何使用流去除集合中某個字段為空的對象,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Java具有一定的參考學習價值,需要的朋友可以參考下
    2023-08-08
  • 詳解java IO流之緩沖流的使用

    詳解java IO流之緩沖流的使用

    本文主要介紹了java的IO流中的緩沖流的使用,緩沖流分為字節(jié)和字符緩沖流。分享了有關(guān)它們的實例代碼,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01

最新評論

博湖县| 香港| 仲巴县| 淮南市| 砀山县| 黎川县| 乐陵市| 涟源市| 宝兴县| 内丘县| 满城县| 公安县| 大连市| 宣化县| 荃湾区| 保山市| 泸定县| 商丘市| 连平县| 会泽县| 襄城县| 丰宁| 鸡西市| 称多县| 长白| 长岛县| 鹰潭市| 中卫市| 清水河县| 政和县| 巴林右旗| 贵德县| 阳原县| 法库县| 社旗县| 时尚| 讷河市| 万载县| 康定县| 金阳县| 汉源县|