這里接口用表存起來,標記請求方式,然后接受參數,消息或者請求參數都可以,
然后先是遍歷需要調用的接口,封裝參數,再分別調用get與post即可,沒有微服務還是得自己寫
//消息轉發-獲取參數中對應參數調用對應接口 public void pmsForward(Map<String, String> map){ List<PmsForwardAddress> address = forwardAddressHelper.getAddress();//從內存獲取轉發地址 //封裝參數 List<NameValuePair> params = new ArrayList<NameValuePair>(); Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<String, String> next = iterator.next(); params.add(new BasicNameValuePair(next.getKey(),next.getValue())); } address.forEach(x->{ if(StringUtil.isNotEmpty(x.getType())){ if(StringUtil.equals(x.getType(),"GET")){ //get請求 pmsForwardService.getInvoking(x.getAddress(),params); }else if(StringUtil.equals(x.getType(),"POST")){ //post請求 pmsForwardService.postInvoking(x.getAddress(),params); } }else{ log.debug("所請求地址請求方式為空:"+x.getId()+","+x.getAddress()); } }); }
,然后是get調用與post調用:
public void getInvoking(String address, List<NameValuePair> params) { log.debug("進入get接口調用,參數:"+params+",地址:"+address); CloseableHttpResponse response = null; CloseableHttpClient httpClient = HttpClients.createDefault(); try { URIBuilder builder = new URIBuilder(address); builder.setParameters(params); HttpGet get = new HttpGet(builder.build()); response = httpClient.execute(get); if(response != null && response.getStatusLine().getStatusCode() == 200){ HttpEntity entity = response.getEntity(); log.info("pms消息轉發成功,返回結果"+entityToString(entity)); } } catch (Exception e) { e.printStackTrace();log.error("pms消息轉發失敗"+response.getEntity()); } finally { try { httpClient.close();if(response != null)response.close(); } catch (IOException e) { e.printStackTrace(); } } } @Override public void postInvoking(String address, List<NameValuePair> params) { log.debug("進入post接口調用,參數:"+params+",地址:"+address); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost(address); CloseableHttpResponse response = null; try { post.setEntity(new UrlEncodedFormEntity(params,"UTF-8")); response = httpClient.execute(post); if(response != null && response.getStatusLine().getStatusCode() == 200){ HttpEntity entity = response.getEntity(); log.info("pms消息轉發成功,返回結果"+entityToString(entity)); } } catch (Exception e) { e.printStackTrace();log.error("pms消息轉發失敗"+response.getEntity()); } finally { try { httpClient.close(); if(response != null) { response.close(); } } catch (IOException e) { e.printStackTrace(); } } }
,最后是將response轉換成String的方法:
//解析httpclient返回結果,轉換成String private String entityToString(HttpEntity entity) throws IOException { String result = null; if(entity != null) { long lenth = entity.getContentLength(); if(lenth != -1 && lenth < 2048){ result = EntityUtils.toString(entity,"UTF-8"); }else { InputStreamReader reader1 = new InputStreamReader(entity.getContent(), "UTF-8"); CharArrayBuffer buffer = new CharArrayBuffer(2048); char[] tmp = new char[1024]; int l; while((l = reader1.read(tmp)) != -1) { buffer.append(tmp, 0, l); } result = buffer.toString(); } } return result; }
可以debug查看結果了!
還有就是直接使用JSON封裝參數:
POST: 只需要設置一下請求頭就行了
CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost post = new HttpPost(address); post.setHeader("Content-Type", "application/json;charset=UTF-8"); String parameter = GSON.toJson(params); StringEntity se = new StringEntity(parameter); se.setContentType(CONTENT_TYPE_TEXT_JSON); post.setEntity(se); CloseableHttpResponse response = null; try { response = httpClient.execute(post); if(response != null && response.getStatusLine().getStatusCode() == 200){ HttpEntity entity = response.getEntity(); log.info("消息轉發成功,返回結果"+entityToString(entity)); } } catch (Exception e) { e.printStackTrace();log.error("消息轉發失敗"+response.getEntity()); } finally { try { httpClient.close(); if(response != null) { response.close(); } } catch (IOException e) { e.printStackTrace(); } }