服务间调用方法:HttpClient
2017-11-23 18:54
501 查看
在公司涉及到这样一个需求,要求一个工程调用另一个工程的接口,一开始还挺高兴,自己做过dubbo的,这个应该不是问题,因为我们这个项目没有使用Dubbo框架,所以得用另一种方法了。
最一开始我想着将另一个工程打成jar包使用,后来觉得这种方法应该效率会很低,一个工程里又放另一个工程。
后来从周博大哥那里知道使用HttpClient就可以。
Controller信息:
由于该方法是get请求,所需传的参数应该是自行拼接,如果是post方式则不必拼接,具体看MyHttpClient类对post方法的定义:
一开始我传的参数是map,有{},在url中就会自动拼接,但是url是无法识别这个符号的,后来干脆就改了参数的传递方式,改传map为多个参数,本来这样调用以为就可以成功了,结果报错,查了查是因为在url中无法拼接protocol错误,原来是url前没加http。
期间还有个问题,就是如果传的参数为null,就不用在url拼接,那么就用到StingBuffer直接append了。具体用法:
最一开始我想着将另一个工程打成jar包使用,后来觉得这种方法应该效率会很低,一个工程里又放另一个工程。
后来从周博大哥那里知道使用HttpClient就可以。
HttpClient方法的使用
配置文件
config.properties配置url信息:#countryData URI doc.method=http:localhost:8080/nation_data_admin doc.SelectNationDataList.uri=/nationData/selectNationData
Controller信息:
String url = ApplicationUtil.getValue("doc.method") +ApplicationUtil.getValue("doc.SelectDataService.uri") + "?code=" + code; result = MyHttpClient.getMethod("http://" + url);
由于该方法是get请求,所需传的参数应该是自行拼接,如果是post方式则不必拼接,具体看MyHttpClient类对post方法的定义:
public static String postMethod(String url,Map parameters)throws Exception{ HttpPost post = null; CloseableHttpResponse response = null; try{ post = new HttpPost(url); if(parameters!=null){ List<NameValuePair> nvps = new ArrayList<NameValuePair>(); Iterator it = parameters.entrySet().iterator(); while(it.hasNext()){ Map.Entry entry = (Map.Entry)it.next(); String key = (String)entry.getKey(); String value = (String)entry.getValue(); nvps.add(new BasicNameValuePair(key, value)); } post.setEntity(new UrlEncodedFormEntity(nvps,"utf-8")); } response = client.execute(post); HttpEntity entity = response.getEntity(); String result = EntityUtils.toString(entity); return result; }catch(Exception e){ e.printStackTrace(); }finally{ try{ response.close(); post.releaseConnection(); }catch(Exception e){ e.printStackTrace(); } } return null; }
一开始我传的参数是map,有{},在url中就会自动拼接,但是url是无法识别这个符号的,后来干脆就改了参数的传递方式,改传map为多个参数,本来这样调用以为就可以成功了,结果报错,查了查是因为在url中无法拼接protocol错误,原来是url前没加http。
期间还有个问题,就是如果传的参数为null,就不用在url拼接,那么就用到StingBuffer直接append了。具体用法:
StringBuffer sb = new StringBuffer(); sb.append(ApplicationUtil.getValue("doc.method")); sb.append(ApplicationUtil.getValue("doc.SelectNationDataList.uri") + "?"); if(dataClassification != null && dataClassification.length()>0){ sb.append("dataClassification=" + dataClassification + "&");
Dubbo
对dubbo的认识停留在远程调用,RPC。可是具体的原理还没有系统学习过。这几天刚好学习taotao,所以就下篇博客小编会对dubbo总结一下吧,刚好和今天的httpClient呼应。总结
从项目中学到了很多东西,和之前学的dubbo联系起来,加深了对服务调用的认识。这接口调通多亏了很多小伙伴的帮助啊,多谢喽!相关文章推荐
- java调用百度地图web服务api-----该方法可用在js跨域请求上
- 通过bindService调用服务里面的方法
- 《WF编程》系列之19 - 触发事件与调用方法:服务以及工作流的实现 3.2.3.2服务的实现
- jQuery AJAX实现调用页面后台方法和web服务定义的方法
- C#动态调用Web服务的3种方法
- C#动态调用Web服务的3种方法
- 安卓开发之调用服务里的方法
- Android中通过接口调用服务里的方法
- Silverlight2 跨域调用Web服务的方法
- jQuery实现ajax调用WCF服务的方法(附带demo下载)
- 学习之路十四:客户端调用WCF服务的几种方法小议
- 使用AIDL实现IPC通信之——简单调用远程服务的方法
- spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法
- Android -- service 利用广播调用服务的方法
- Android 使用【AIDL】调用外部服务的解决方法
- PHP使用NuSOAP调用Web服务的方法
- cxf 客户端调用webService服务的方法
- c#调用百度地图web服务api-----该方法可用在js跨域请求上
- java调用百度地图web服务api-----该方法可用在js跨域请求上
- WCF 客户端调用服务操作的两种方法