中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

http請求怎么在spring boot中使用

發布時間:2021-04-08 16:39:41 來源:億速云 閱讀:285 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關http請求怎么在spring boot中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

首先是經過封裝:

一:初始化httpclient

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

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

//根據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根據/ 進行split,因為我這是測試環境,生產環境ip,端口號(域名)肯定不是localhost,有的前面還會加上項目名稱,所以我split對應的值來進行替換。

三:拼裝請求參數,調用http請求

/**
* 發送http請求 有request
* 給controller層調用
* @param request 
* @return 
*/
public String sendHttpToDevFac(HttpServletRequest request)throws Exception { 
HttpClient client = null; 
String returnResult=""; 
// http://localhost:8080/leo/1.0/h6/login 
StringBuffer urlBuffer=getUrlToRequest(request);//調用第二步,獲取url 
//獲取參數并拼裝
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("開始調用http請求,請求url:"+urlBuffer.toString());
HttpResponse rep=client.execute(get); 
returnResult=EntityUtils.toString(rep.getEntity(),"utf-8");
logger.info("http 請求調用結束!!");
return returnResult; 
}

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

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

沒有經過封裝的:

首先從上下文中獲取request的

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

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

/**
 * 沒有request 請求,給controller層調用
 * @param key
 * @param interfaceName
 * @param strings
 * @return
 * @throws Exception
 */
 public String centerToDeviceFacNoRequest(String key,String interfaceName)throws Exception {
 try {
  HttpServletRequest request=getRequest();//上面第一步,從上下文中獲取url
  //獲取reuquest請求參數
  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);
  }
  //調用發送http請求的方法
  return sendHttpToDevFacNoData(paramMap,request);
 } catch (Exception e) {
  e.printStackTrace();
 }
 //end
 return null;
 }

三:發送http請求

/**
 * 發送http請求,【沒有data數據的】
 * @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("&"));
 //發送請求
 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("開始調用http請求,請求url:"+resultUrl);
 //返回結果
 result=EntityUtils.toString(rep.getEntity(),"utf-8");
 logger.info(" http 請求調用結束!!");
 return result;
 }

看完上述內容,你們對http請求怎么在spring boot中使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淳化县| 舞钢市| 香格里拉县| 富宁县| 井陉县| 高台县| 家居| 布拖县| 五大连池市| 海丰县| 高安市| 达拉特旗| 东港市| 奈曼旗| 思南县| 桂阳县| 本溪| 绥中县| 新野县| 易门县| 漳州市| 沙洋县| 台东县| 巍山| 巴马| 民和| 铁岭县| 建德市| 涡阳县| 化德县| 宣武区| 湾仔区| 万山特区| 沙坪坝区| 丁青县| 姚安县| 淄博市| 栾城县| 仁怀市| 阿荣旗| 惠东县|