這里接口用表存起來,標記請求方式,然后接受參數,消息或者請求參數都可以,
然后先是遍歷需要調用的接口,封裝參數,再分別調用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();
}
}
