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();
    }
  • 相关阅读:
    独立使用 ecj
    公司没有 DBA,Mysql 运维自己来
    mysql安装
    常用模块
    基本数据类型
    Incorrect column name 问题解决
    mysql中date和datetime的区别
    python yield用法详解(未完成)
    mysql报错--initialize specified but the data directory has files in it. Aborting.
    python 列表解析式
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/9133612.html
Copyright © 2011-2022 走看看