这里接口用表存起来,标记请求方式,然后接受参数,消息或者请求参数都可以,

然后先是遍历需要调用的接口,封装参数,再分别调用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();
}
}

  

使用httpClient调用接口,参数用map封装或者使用JSON参数,并转换返回结果的更多相关文章

  1. httpClient调用接口的时候,解析返回报文内容

    比如我httpclient调用的接口返回的格式是这样的: 一:data里是个对象 { "code": 200, "message": "执行成功&qu ...

  2. 使用HttpClient调用接口

    一,编写返回对象 public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body;get/set ...

  3. mybatis传入map参数,map中包含list(输入参数)

    1.xml中配置: <!-- 根据条件查询满足条件的ID集合开始 --> <select id="getQuestionsIdsForExamPaper" res ...

  4. 解决使用Mybatis 传入多参数使用map封装遇到的 “坑”问题

    好久没来写些东西了,今天 我分享一下自己遇到的一个“小 坑”,这也许对您来说不是个问题,但是我还是希望对没有遇到过这类问题的朋友给个小小的帮助吧 是这样的,需求:需要实现根据多条件 且分页展示数据 1 ...

  5. java通过HttpClient调用接口总结

    2.HttpClient 2.1简介: 最近看项目的代码,看到工程中有两个jar包张的很像,一个是commons.httpclient-3.1.jar,一个是httpclient4.2.1.jar,很 ...

  6. 使用httpClient调用接口获取响应数据

    转自:https://blog.csdn.net/shuaishuaidewo/article/details/81136088 import lombok.extern.slf4j.Slf4j; i ...

  7. javascript应用:页面解析list和map封装后的json数据

    开发web项目时,经常会使用到的页面脚本语言javascript,使用它能让页面展示上的效果更多彩. 今天就来说一下,从数据库中获取到数据后在页面上的展示方式: 1.数据库取出数据放入list< ...

  8. 使用HttpClient调用第三方接口

    最近项目中需要调用第三方的Http接口,这里我用到了HttpClient. 首先我们要搞明白第三方接口中需要我们传递哪些参数.数据,搞明白参数以后我们就可以使用HttpClient调用接口了. 1.调 ...

  9. 使用HttpClient访问接口(Rest接口和普通接口)

    这里总结一下使用HttpClient访问外部接口的用法.后期如果发现有什么缺陷会更改.欢迎读者指出此方法的不足之处. 首先,创建一个返回实体: public class HttpResult { // ...

随机推荐

  1. Redis:主从复制

    前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...

  2. UVALive3713_Astronauts

    有n个宇航员,根据年龄限制,所有宇航员只能从事A或B中的一种任务,所有人都可以从事C的任务.有的宇航员之间相互讨厌,不能分在一组,求出一种满足条件的分配方案. 2sat.mark[]中i+i和i+i+ ...

  3. 绿色计算大赛决赛 第二阶段 消息传递(斯坦纳树 状压dp+spfa)

    传送门 Description 作为公司老板的你手下有N个员工,其中有M个特殊员工.现在,你有一个消息需要传递给你的特殊员工.因为你的公司业务非常紧张,所以你和员工之间以及员工之间传递消息会造成损失. ...

  4. Mybatis笔记八:MyBatis中#{}和${}的区别

    先给大家介绍下MyBatis中#{}和${}的区别,具体介绍如下: 1. $将传入的数据直接显示生成在sql中 2. #方式能够很大程度防止sql注入. 3.$方式无法防止Sql注入. 4.$方式一般 ...

  5. BZOJ 2732: [HNOI2012]射箭

    2732: [HNOI2012]射箭 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2532  Solved: 849[Submit][Status] ...

  6. 2017 Multi-University Training Contest - 3

    HDU 6058 #pragma comment(linker, "/STACK:102400000,102400000") #include <bits/stdc++.h& ...

  7. CH3101 阶乘分解

    题目链接 分解\(n!\)的质因数,输出相应的\(p_i\)和\(c_i\). 其中\(1\leq n\leq 10^6\).   考虑每一个质因子 \(p\) 在 \(n!\) 中出现的次数.显然, ...

  8. P1077 摆花

    P1077 摆花 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号.为了在门口展出更多种花, ...

  9. python中的常用模块(2)

    在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件), 经常要对大量文件和大量路径进行操作,这就依赖于os模块. 1.当前路径及路径 ...

  10. Mac下配置环境变量(转)

    说明:Mac下一般使用bash作为默认shell 一.Mac系统的环境变量,加载顺序为: /etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~ ...