• URLConnection调用接口


    写在前面:

      项目是java web,jdk1.4,weblogic 7;对方.net系统,用wcf开发的接口。对方提供接口url地址,以及说明用post方式去调用,无需传递参数,直接返回json array(json数组格式的数据)

      调用接口的方法有很多中,框架调用,ajax调用,urlConnection等等.由于项目需要,需要远程调用对方.net系统的接口,其接口是用wcf开发的,然后我们这边的系统是java,并且jdk是1.4,所以主流的一些框架调用已经用不了了,一般要jdk1.6以上才可以。说到这里,axis是可以适用于jdk1.4的,但是当采用客户端生成代码的方式的时候,我生成的类有缺少,不知道为啥,果断放弃;然后由于是跨域调用接口(也就是双方的系统不在一个服务器里面),并且需要post方式去访问,故ajax的方式也不行,因为ajax不支持跨域,当然利用jsonp是可以跨域的,但是它是采用get方式访问的。在挣扎尝试了两三天后,求助贴吧大神,大神跟我语音,让我用httpurlconnection的方式去访问,也就是URLConnection调用接口。之后,我又拿出了传智播客的webservice的视频笔记,上面也有提及到采用URLConnection调用接口,于是我就打算试试。成功啦......真是强大哈。。。(貌似这种方式可以适用于各种接口的调用,也可以调用webservice,大家都可以试一试,遇到问题不要怕,啊哈哈哈。。。。。)

      

      1.准备工作:

      对于URLConnection调用接口貌似不需要导入任何相关的jar包,这个要根据项目来定。这里返回的是json数组的字符串,所以这里我要用到json相关的jar来进行获取。导入json的jar包就可以了。

      代码:可以自己先写一个main java程序来连接测试一下,然后再放到具体的项目上去进行调用。

    public static void main(String[] args) {
            
            //创建url地址 这里的url地址我是乱写的  你们填写自己的需要调用的接口就好
            URL url = new URL("http://10.10.10.83/GetProjectNameService/GetProjectNameService.svc/getProjectName");
            //打开连接
            URLConnection conn = url.openConnection();
            //转换成HttpURL
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            
            //连接超时的相关设置   看相关博客说要加上 就没有去掉
            System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
            System.setProperty("sun.net.client.defaultReadTimeout", "30000");
            
            //打开输入输出的开关
            httpConn.setDoInput(true);
            httpConn.setDoOutput(true);
            //post提交不能有缓存
            httpConn.setUseCaches(false);
            //设定传送的内容类型是可序列化的java对象  如果不需要传递参数 就不需要写就行了
            //httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object");
            //httpConn.setRequestProperty("Content-type", "UTF-8");
            //设置请求的头信息    这里的请求类型是根据自己需要传递的参数来决定的  
            //httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
            
         //注意如果这里是get请求方式 且 不许需要传递参数 这里直接将post换为get  且删掉获得输出流 并发送数据 的相关代码即可
    //设置请求方式 httpConn.setRequestMethod("POST"); //获得输出流 OutputStream out = httpConn.getOutputStream(); //发送数据 即使什么参数也不用传递 也要发送数据 穿空的字符串就好了 ObjectOutputStream objOut = new ObjectOutputStream(out); objOut.writeObject(new String("")); objOut.flush(); objOut.close(); //获得输入流 在这里获得输入流的时候 就已经默认执行了connect()方法 故上一步可以省略这个方法 InputStream in = httpConn.getInputStream(); //判断请求成功 StringBuffer sb = new StringBuffer(); JSONArray jarr = null; String str = ""; if(httpConn.getResponseCode() == 200){
    //使用输入流的缓冲区 这里加入UTF-8可以解决乱码的问题 BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8")); String line = null; //读取输入流 while((line = reader.readLine()) != null){ sb.append(line); } str = sb.toString(); System.out.println("返回结果:"+str); //由于对方返回的结果是json数组格式的字符串 故将json数组格式的字符串转为json数组 //可根据自己项目的需要来转为需要的类型 具体方法 可以百度 jarr = new JSONArray(str); //遍历打印 for(int i=0;i<jarr.length();i++){ System.out.println(jarr.getString(i)); } } }

     交流群:527038646  嘻嘻嘻

      

  • 相关阅读:
    form组件进阶_django
    form组件_django
    django的数据库ORM进阶操作
    内网安装python模块_python
    Redhat7.4安装oracle11.2.0.4版本数据库遇见的问题_oracle
    Redis基础数据类型与对象
    SpringIOC容器——ApplicationContext和BeanFactory
    AQS源码解析
    Java内存模型(一)
    面试准备笔记
  • 原文地址:https://www.cnblogs.com/eleven258/p/7117099.html
Copyright © 2020-2023  润新知