1. import com.ibm.db.util.AppConfig;
  2. import com.ibm.db.util.JacksonUitl;
  3. import org.apache.http.HttpEntity;
  4. import org.apache.http.HttpHost;
  5. import org.apache.http.HttpResponse;
  6. import org.apache.http.auth.AuthScope;
  7. import org.apache.http.auth.UsernamePasswordCredentials;
  8. import org.apache.http.client.AuthCache;
  9. import org.apache.http.client.methods.HttpGet;
  10. import org.apache.http.client.methods.HttpPost;
  11. import org.apache.http.client.protocol.ClientContext;
  12. import org.apache.http.entity.StringEntity;
  13. import org.apache.http.impl.auth.BasicScheme;
  14. import org.apache.http.impl.client.BasicAuthCache;
  15. import org.apache.http.impl.client.DefaultHttpClient;
  16. import org.apache.http.protocol.BasicHttpContext;
  17. import org.apache.http.protocol.HTTP;
  18. import org.codehaus.jackson.JsonNode;
  19.  
  20. import java.io.BufferedReader;
  21. import java.io.InputStreamReader;
  22. import java.util.HashMap;
  23. import java.util.LinkedHashMap;
  24. import java.util.Map;
  25.  
  26. /**
  27. *
  28. * 调用itil工具类
  29. */
  30. public class ItilRequestUtil {
  31.  
  32. private String itil_url= ""; //被调用接口的url
  33. private String itil_usernmae = ""; //用户名
  34. private String itil_passWorld = ""; //密码
  35. private int itil_port = ; //端口号
  36. private String itil_protocol = "http";//协议
  37.  
  38. public ItilRequestUtil(){
  39.  
  40. }
  41.  
  42. /**
  43. * rest post 方式调用itil接口
  44. * @param JsonParams json格式的请求参数
  45. * @param apiUrl api接口地址
  46. * @return
  47. * @throws Exception
  48. */
  49. public JsonNode httpRequestPost(String JsonParams,String apiUrl)throws Exception{
  50.  
  51. HttpHost targetHost = new HttpHost(itil_url, itil_port, itil_protocol);
  52.  
  53. DefaultHttpClient httpclient = new DefaultHttpClient();
          //设置httpclient的重试次数,默认是3次,当前是禁用掉的(如果项目量不到,这个默认即可!)
         int SO_TIMEOUT = 60*1000;//设置等待数据超过时间为60秒,这里是连上别人的接口,但是迟迟不返回数据(堵塞的异常处理)
         
  54.      HttpParams params = new BasicHttpParams();
    params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT,SO_TIMEOUT);
    httpclient.setDefaultHttpParams(params);
  55. //此用户名和密码上生产前需要修改为自己的账户
  56. httpclient.getCredentialsProvider().setCredentials(
  57. new AuthScope(targetHost.getHostName(), targetHost.getPort()),
  58. new UsernamePasswordCredentials(itil_usernmae, itil_passWorld));
  59.  
  60. AuthCache authCache = new BasicAuthCache();
  61. BasicScheme basicAuth = new BasicScheme();
  62. authCache.put(targetHost, basicAuth);
  63.  
  64. BasicHttpContext localcontext = new BasicHttpContext();
  65. localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
  66. String url = itil_protocol+"://"+itil_url+":"+itil_port+apiUrl;
  67.  
  68. HttpPost httpPost = new HttpPost(url);
  69.  
  70. StringEntity stringEntity = new StringEntity(JsonParams, HTTP.UTF_8);
  71.  
  72. httpPost.setHeader("Content-Type", "application/json");
  73. httpPost.setHeader("accept","application/json");
  74.  
  75. httpPost.setEntity(stringEntity);
  76.  
  77. HttpResponse response = httpclient.execute(targetHost, httpPost, localcontext);
  78.  
  79. HttpEntity entity = response.getEntity();
  80.  
  81. System.out.println("StatusCode:" + response.getStatusLine().getStatusCode());
  82.  
  83. BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(),"utf-8"));//防止乱码
  84. String buffer = "";
  85. StringBuffer sb = new StringBuffer();
  86. while((buffer = reader.readLine())!=null){
  87. sb.append(buffer);
  88. }
  89. reader.close();
  90. httpPost.releaseConnection();
  91. System.out.println("entity:" + sb.toString());
  92. httpclient.getConnectionManager().shutdown();
  93.  
  94. JsonNode json = JacksonUitl.getObjectMapper().readTree(sb.toString());
  95. return json;
  96.  
  97. }
  98.  
  99. /**
  100. * rest get 方式调用itil接口
  101. * @param apiUrl api接口地址,参数直接拼在地址后面
  102. * @return json字符串格式的返回结果 其中ReturnCode为0表示请求成功
  103. * @throws Exception
  104. */
  105. public JsonNode httpRequestGet(HashMap<String, Object> content,String apiUrl)throws Exception{
  106.  
  107. HttpHost targetHost = new HttpHost(itil_url, itil_port, itil_protocol);
  108.  
  109. DefaultHttpClient httpclient = new DefaultHttpClient();
  110.  
  111. //此用户名和密码上生产前需要修改为自己的账户
  112. httpclient.getCredentialsProvider().setCredentials(
  113. new AuthScope(targetHost.getHostName(), targetHost.getPort()),
  114. new UsernamePasswordCredentials(itil_usernmae, itil_passWorld));
  115.  
  116. AuthCache authCache = new BasicAuthCache();
  117. BasicScheme basicAuth = new BasicScheme();
  118. authCache.put(targetHost, basicAuth);
  119.  
  120. BasicHttpContext localcontext = new BasicHttpContext();
  121. localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
  122. String url = itil_protocol+"://"+itil_url+":"+itil_port+apiUrl;
  123.  
  124. HttpGet httpGet = new HttpGet(url);
  125.  
  126. httpGet.setHeader("Content-Type", "application/json");
  127. httpGet.setHeader("accept","application/json");
  128.  
  129. HttpResponse response = httpclient.execute(targetHost, httpGet, localcontext);
  130.  
  131. HttpEntity entity = response.getEntity();
  132.  
  133. System.out.println("StatusCode:" + response.getStatusLine().getStatusCode());
  134.  
  135. BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent()));
  136. String buffer = "";
  137. StringBuffer sb = new StringBuffer();
  138. while((buffer = reader.readLine())!=null){
  139. sb.append(buffer);
  140. }
  141. reader.close();
  142. httpGet.releaseConnection();
  143. System.out.println("entity:" + sb.toString());
  144. httpclient.getConnectionManager().shutdown();
  145.  
  146. JsonNode json = JacksonUitl.getObjectMapper().readTree(sb.toString());
  147. return json;
  148.  
  149. }
  150.  
  151. public static void main(String[] args) throws Exception {

  152.      /**
          *其实这里不需要写这个测试的,实际项目中,直接写自己的方法调用即可!
          */
  153.  
  154. String apiUrl = "/SM/9/rest/reportoutages?view=expand";//调用方法对应的URL
  155.  
  156. HashMap<String,Object> map = new LinkedHashMap<String, Object>();
  157. map.put("sourceId","GEN00002");
  158. map.put("assignee","0020345");
  159. map.put("title","测试");
  160. map.put("category","流程管理");
  161. map.put("subcategory","itil系统");
  162. map.put("businessArea","其他");
  163. map.put("description","xx");
  164. map.put("requestor","036131");
  165. map.put("requestor","036131");
  166. map.put("plannedEnd","2016-04-07T10:11:54+00:00");
  167. HashMap<String,Map<String,Object>> paramsMap = new LinkedHashMap<String, Map<String, Object>>();
  168. // paramsMap.put("GenRequest",map);
  169. paramsMap.put("orderInfo",map);
  170. String params = JacksonUitl.getObjectMapper().writeValueAsString(paramsMap);
  171. //需要传入的请求参数
  172. String pp = "{"+"\"orderInfo\": {"
  173. +"\"sourceId\": \"GEN00002\","
  174. +"\"assignee\": \"00203045\","
  175. +"\"title\": \"测试:评估体系平台系统发起新情求\","
  176. +"\"category\": \"流程管理\","
  177. +"\"subcategory\": \"ITIL系统\","
  178. +"\"businessArea\": \"其他\","
  179. +"\"description\": [\"评估体系平台系统发起新情求\",\"需求详细描述\"],"
  180. +"\"requestor\": \"036131\","
  181. +"\"plannedEnd\": \"2015-12-11T01:00:00+08:00\"," +"}"+"}";
  182. // map.put("name","123");
  183. new ItilRequestUtil().httpRequestPost(pp, apiUrl);
  184. // new ItilRequestUtil().httpRequestGet(null, apiUrl);
  185.  
  186. try {
  187. // httpRequestPost();
  188. /* test(url_2,"{\"\":\"\"}");*/
  189. }catch (Exception e){
  190.  
  191. }
  192. }
  193.  
  194. }

这里我还加了一个定时器,如果不需要用到定时器,则不需要以下代码。

spring自带的定时器功能(JavaSe的是Timer类)还需要在spring的配置文件中(application.xml)添加如下配置信息,配置信息可参考(http://cuisuqiang.iteye.com/blog/1320255)

  1. <!-- 一、每个定义的任务都要在这里进行引用才能运行 -->
  2. <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  3. <property name="triggers">
  4. <list>
  5. <ref local="BusinessTestTrigger" />
  6. </list>
  7. </property>
  8. </bean>
  9. <!-- 四、定义我们要运行的类,可以使用注入定制一些参数 -->
  10. <bean id="BusinessTestTime" class="com.ibm.tools.EcpTool">
  11. <!--<property name="para" value="Spring定时器测试V1" />-->
  12. </bean>
  13. <!-- 三、引用,配置要运行的方法 -->
  14. <bean id="BusinessTestDetail"
  15. class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  16. <property name="targetObject">
  17. <ref bean="BusinessTestTime" />
  18. </property>
  19. <property name="concurrent" value="false" />
  20. <!--要定时执行的目标方法,我自己定义的方法为myMethod-->
  21. <property name="targetMethod" value="myMethod" />
  22. </bean>
  23. <!-- 二、引用,定制调用间隔,具体时间配置的正则,请阅读readme.txt -->
  24. <bean id="BusinessTestTrigger"
  25. class="org.springframework.scheduling.quartz.CronTriggerBean">
  26. <property name="jobDetail">
  27. <ref bean="BusinessTestDetail" />
  28. </property>
  29. <property name="cronExpression">
  30. <!--每个字符分别代表秒、分、时、天、月、星期、年份
  31. 参考网址http://blog.csdn.net/xiao_wgs69/article/details/11269391
  32. -->
  33. <value>0/5 * * * * ?</value>
  34. </property>
  35. </bean>

还需要相应的jar包,maven项目之间添加,如果是普通web工程添加spring.jar,quartz-all-1.6.5.jar,quartz-1.5.2.jar,这两个jar包

  1. <!-- https://mvnrepository.com/artifact/quartz/quartz -->
  2. <dependency>
  3. <groupId>quartz</groupId>
  4. <artifactId>quartz</artifactId>
  5. <version>1.5.2</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/opensymphony/quartz-all -->
  8. <dependency>
  9. <groupId>opensymphony</groupId>
  10. <artifactId>quartz-all</artifactId>
  11. <version>1.6.3</version>
  12. </dependency>

已通过测试的,具体的业务逻辑,还需自己去补充!我只写了连接的通用方法,另附上Json数据转换的而工具类,因为上面用到了

  1. public class JacksonUtil {
  2. private static ObjectMapper objectMapper = null;
  3. private JacksonUtil(){
  4.  
  5. }
  6.  
  7. public static ObjectMapper getObjectMapper(){
  8. if(objectMapper==null){
  9. objectMapper = new ObjectMapper();
  10. }
  11. return objectMapper;
  12. }
  13.  
  14. // map转换为json
  15. public void test01(){
  16. Map<String,String> map = new LinkedHashMap<String,String>();
  17. map.put("name","zhangsan");
  18. map.put("age","1");
  19. try{
  20. String jsonStr = JacksonUtil.getObjectMapper().writeValueAsString(map);
  21. //解析json字符串
  22. JsonNode node = JacksonUtil.getObjectMapper().readTree(jsonStr);
  23. System.out.println(jsonStr);
  24. System.out.println("name="+node.get("name").asText());
  25. System.out.println("name="+node.get("name"));
  26. }catch (Exception e){
  27. e.printStackTrace();
  28. }
  29. }
  30.  
  31. // 解析json格式字符串
  32. public void test02(){
  33. String json = "{data:{\"birth_day\":7,\"birth_month\":6},\"errcode\":0,\"msg\":\"ok\",\"rest\":0}";
  34. try {
  35. JsonNode node = JacksonUtil.getObjectMapper().readTree(json);
  36. JsonNode data = node.path("data");
  37.  
  38. JsonNode birth_day = data.path("birth_day");
  39. System.out.println(birth_day.asInt());
  40.  
  41. JsonNode birth_month = data.path("birth_month");
  42. System.out.println(birth_month.asInt());
  43.  
  44. JsonNode msg = node.path("msg");
  45. System.out.println(msg.getTextValue());
  46.  
  47. } catch (IOException e) {
  48. e.printStackTrace();
  49. }
  50. }
  51.  
  52. //json直接提取值
  53. public static void MyTest05(){
  54. String str = "{\"data\":{\"hashnext\":0,\"info\":[{\"id\":\"939399393\",\"timestamp\":\"22242244\"},{\"id\":\"939399393\",\"timestamp\":\"22242244\"},{\"id\":\"939399393\",\"timestamp\":\"22242244\"}],\"errcode\":0,\"msg\":\"ok\",\"rest\":0}}";
  55.  
  56. ObjectMapper mapper = new ObjectMapper();
  57. try {
  58. JsonNode root = mapper.readTree(str);
  59. //提取data
  60. JsonNode data = root.path("data");
  61. //提取info
  62. JsonNode info = root.path("info");
  63. System.out.println(info.size());
  64.  
  65. JsonNode item = info.get(0);
  66. System.out.println(item.get("id"));
  67. System.out.println(item.get("timestamp"));
  68. //得到info的第二个值
  69. item = info.get(1);
  70. System.out.println(item.get("id"));
  71. System.out.println(item.get("timestamp"));
  72.  
  73. if(info.isArray()){
  74. for(JsonNode jsonNode:info){
  75. System.out.println(jsonNode);
  76. }
  77. }
  78. } catch (IOException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. //创建一个json,并像该json添加内容
  83. public static void MyTest07(){
  84. ObjectMapper mapper = new ObjectMapper();
  85. ObjectNode objectNode = mapper.createObjectNode();
  86.  
  87. objectNode.put("nodekey1",1);
  88. objectNode.put("nodekey2",2);
  89.  
  90. System.out.println(objectNode.toString());
  91.  
  92. ObjectNode root = mapper.createObjectNode();
  93.  
  94. ObjectNode node1 = mapper.createObjectNode();
  95. node1.put("nodekey1", 1);
  96. node1.put("nodekey2", 2);
  97.  
  98. root.put("child",node1);
  99.  
  100. ArrayNode arrayNode = mapper.createArrayNode();
  101. arrayNode.add(node1);
  102. arrayNode.add(1);
  103. root.put("arraynode",arrayNode);
  104.  
  105. try {
  106. System.out.println(mapper.writeValueAsString(root));
  107. } catch (IOException e) {
  108. e.printStackTrace();
  109. }
  110.  
  111. }
  112.  
  113. // 创建一个arrayNode
  114. public static void MyTest08(){
  115. ObjectMapper mapper = new ObjectMapper();
  116. ArrayNode arrayNode = mapper.createArrayNode();
  117.  
  118. int i = 0;
  119. // 在array内创建3组存入array
  120.  
  121. for(i=0;i<3;i++){
  122. ObjectNode node = mapper.createObjectNode();
  123. node.put("nodeA",i);
  124. node.put("nodeB",i);
  125. node.put("nodeC",i);
  126.  
  127. arrayNode.add(node);
  128. }
  129.  
  130. ObjectNode root = mapper.createObjectNode();
  131. root.put("total",i);
  132. root.put("rows",arrayNode);
  133.  
  134. try {
  135. System.out.println(mapper.writeValueAsString(root));
  136. } catch (IOException e) {
  137. e.printStackTrace();
  138. }
  139. }
  140.  
  141. public static void main(String[] args){
  142. new JacksonUtil().test01();
  143. new JacksonUtil().test02();
  144. new JacksonUtil().MyTest05();
  145. new JacksonUtil().MyTest07();
  146. new JacksonUtil().MyTest08();
  147. }
  148. }

注:因为别人返回给我的是字符串类型的Json数据,我用String去接收的时候就多了另个引号,如本来是"hello",变成了""hello"",这这里也需要处理一下,去掉前后的双引号)

还有就是我的业务逻辑部分

springMVC、httpClient调用别人提供的接口!!!(外加定时调用)的更多相关文章

  1. springMVC、https、GET调用别人提供的接口!!!

    import org.apache.http.HttpEntity; import org.apache.http.HttpHost; import org.apache.http.HttpStatu ...

  2. 调用别人提供的WebService

    在开发过程中,许多时候需要使用到别人提供的WebService接口,使用其中的方法. 在调用别人提供的接口时,会得到接口使用的文档,其中包括接口的网络地址及方法作用等. 找到WebService的ws ...

  3. 如何调用别人提供的webservice接口

    当我们拿到一个接口的时候,先别急着去调用它,我们得先测试这个接口是否正确,是否能调用成功,以及返回的数据是否是我们需要的类型等等.这时候我们需要一个工具,比如SoapUI.(最好用绿色免安装版的.)然 ...

  4. 通用的调用WebService的两种方法。(调用别人提供的wsdl)(转)

    转载自:http://blog.sina.com.cn/s/blog_65933e020101incz.html1.调用WebService的Client端采用jax-ws调用WebService:流 ...

  5. 如何调用别人提供的API?

    1:一般使用聚合数据提供的API: 百度聚合数据,进入: 2:一般是有用户名的直接登录,没有用户名的先进行注册.在搜索框中输入你想查找的API方面的关键字:例如:有关健康的 点开任意一个,你将会看到: ...

  6. jquery怎么实现跨域的访问呢?与别人提供的接口连接

    下面这个例子你可以参考下 <script> $.ajax({ async:false, url: 'http://www.mysite.com/demo.do',  // 跨域URL ty ...

  7. java 调用wsdl的webservice接口 两种调用方式

    关于wsdl接口对于我来说是比较头疼的 基本没搞过.一脸懵 就在网上搜 看着写的都很好到我这就不好使了,非常蓝瘦.谨以此随笔纪念我这半个月踩过的坑... 背景:短短两周除了普通开发外我就接到了两个we ...

  8. Apache cxf暴露接口以及客户端调用之WebService初步理解

    在我们真实的项目中,经常会调用别人提供给我们的接口,或者在自己的团队中, restful风格的前后端分离也经常会提供一个后端接口暴露出去供app,或者.net/C/C++程序员去调用,此时就需要使用到 ...

  9. Spring Boot提供RESTful接口时的错误处理实践

    使用Spring Boot开发微服务的过程中,我们会使用别人提供的接口,也会设计接口给别人使用,这时候微服务应用之间的协作就需要有一定的规范. 基于rpc协议,我们一般有两种思路:(1)提供服务的应用 ...

随机推荐

  1. 利用边框border的属性做小符号

    前两天学习中,发现网站上的一个小符号,以为是插入的img,但找来找去也未发现img的地址.最后问了同学,才得知是用border属性做出来的. 符号如右:  其css代码如下: .fuhao { pos ...

  2. exception catch doesn't work?? (python 3)

    exception catch doesn't work?? (python 3) except u.URLError, e: ^ SyntaxError: invalid syntax in Pyt ...

  3. 6个变态的C语言Hello World程序

    6个变态的C语言Hello World程序   下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C+ ...

  4. __new__方法

    __new__:创建对象时调用,返回当前对象的一个实例__init__:创建完对象后调用,对当前对象的实例的一些初始化,无返回值 案例一: >>> class A(object): ...

  5. ASP.NET基础代码备忘

    使用ASP.NET原生的__doPostBack方法触发asp:Button //javaScript部分 __doPostBack('<%=btnAmountDivided.UniqueID ...

  6. 关于Promise模式 整理中。。。

    http://blog.csdn.net/womendeaiwoming/article/details/49849055 研究了几天Promise模式,因为在项目里也遇到了所谓的“回调陷阱”,就是多 ...

  7. eclipse中如何安装插件ADT及SDK工具

    1.如何在eclipse中安装ADT 首先下载ADT Plugin 下载地址: http://tools.android-studio.org/index.php/adt-bundle-plugin ...

  8. C实现栈和队列

    这两天再学习了数据结构的栈和队列,思想很简单,可能是学习PHP那会没有直接使用栈和队列,写的太少,所以用具体代码实现的时候出现了各种错误,感觉还是C语言功底不行.栈和队列不论在面试中还是笔试中都很重要 ...

  9. 几种鼠标触发CSS事件

    onMouseDown 按下鼠标时触发 onMouseOver 鼠标经过时触发 onMouseUp 按下鼠标松开鼠标时触发 onMouseOut 鼠标移出时触发 onMouseMove 鼠标移动时触发 ...

  10. 【转载】PyQt QSetting保存设置

    转载地址: http://blog.sina.com.cn/s/blog_4b5039210100h3zb.html 用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位 ...