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();
}

猜你喜欢

转载自www.cnblogs.com/yifanSJ/p/9133612.html