zoukankan      html  css  js  c++  java
  • HttpURLConnection调用Restful接口

    Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多,

    1. HttpURLConnection实现

    2. HttpClient实现

    3. Spring的RestTemplate

    本文用HttpURLConnection实现调用Restful接口

    public static void main(String[] args) throws Exception{
        String url = "http://localhost:8080/gjxx-system-web/getBusiness?licnum=" + "123&organiz="+"345";
        URL urlUtil = new URL(url);
        /**
         * 此处的urlConnection对象实际上是根据URL的请求协议(此处是http)生成的URLConnection类的子类HttpURLConnection,
         * 故此处最好将其转化为HttpURLConnection类型的对象,以便用到HttpURLConnection更多的API.
         */
        HttpURLConnection urlConnnection = (HttpURLConnection) urlUtil.openConnection();
        //设定请求的方法为"POST",默认是GET 
        urlConnnection.setRequestMethod("POST");
        //设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
        urlConnnection.setDoOutput(true);
        //设置是否从httpUrlConnection读入,默认情况下是true; 
        urlConnnection.setDoInput(true);
        //Post请求不能使用缓存
        urlConnnection.setUseCaches(true);
        //设定传送的内容类型是可序列化的java对象(如果不设此项,在传送序列化对象时,当WEB服务默认的不是这种类型时可能抛java.io.EOFException) 
        urlConnnection.setRequestProperty("Content-Type", "application/json");
        //设置连接超时
        urlConnnection.setConnectTimeout(10000);
        //设置读取超时(从输入流读取时的超时)
        urlConnnection.setReadTimeout(20000);
        /**
         * connect()会按照之前set生成HttpHeader
         * 正文的内容是通过outputStream流写入
         */
        // 此处getOutputStream会隐含的进行connect()
        OutputStream outputStream = urlConnnection.getOutputStream();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("licnum", "123");
        jsonObject.put("organiz", "345");
        //向对象输出流写出数据,outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络
        outputStream.write(jsonObject.toString().getBytes("utf-8"));
        //刷新对象输出流,将任何字节都写入潜在的流中(些处为outputStream) 
        outputStream.flush();
        //关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中, 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器 
        outputStream.close();
        /**
         * 实际发送请求的代码段在下面
         */
        // 调用HttpURLConnection连接对象的getInputStream()函数,将内存缓冲区中封装好的完整的HTTP请求电文发送到服务端。 
        InputStream inputStream = urlConnnection.getInputStream(); // <===注意,实际发送请求的代码段就在这里 
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
        String line = "";
        String result = "";
        for (; (line = br.readLine()) != null; result += line) {
            ;
        }
        System.out.println(result);
        br.close();
    }
  • 相关阅读:
    2019年上半年收集到的人工智能深度学习方向干货文章
    2019年上半年收集到的人工智能自然语言处理方向干货文章
    2019年上半年收集到的人工智能图神经网络干货文章
    2019年上半年收集到的人工智能自动驾驶方向干货文章
    SAP 不支持交货单中同一个物料多个行项目HU与序列号组合发货场景
    SAP S4HANA 使用BP创建供应商报错
    yum/dnf/rpm 等 查看rpm 包安装路径 (fedora 中 pygtk 包内容安装到哪里了)
    apache 允许 访问软链接 ( Apache won't follow symlinks (403 Forbidden) )
    fedora 开启 apache 并 开启目录浏览模式
    如何在 windows server 2008 上面 挂载NFS
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/9133612.html
Copyright © 2011-2022 走看看