Contents

HttpURLConnection的POST请求JSON

1. 概述

在本教程中,我们将演示如何使用HttpURLConnection 发出JSON POST 请求。

2. 使用HttpURLConnection构建 JSON POST 请求

2.1. 创建一个URL对象

让我们创建一个带有目标 URI 字符串的 URL对象,该字符串通过 HTTP POST 方法接受 JSON 数据:

URL url = new URL ("https://reqres.in/api/users");

2.2. 打开连接

从上面的URL对象中,我们可以调用openConnection方法来获取HttpURLConnection对象。

我们不能直接实例化HttpURLConnection,因为它是一个抽象类:

HttpURLConnection con = (HttpURLConnection)url.openConnection();

2.3. 设置请求方法

要发送 POST 请求,我们必须将请求方法属性设置为 POST:

con.setRequestMethod("POST");

2.4. 设置请求内容类型标头参数

“content-type”请求头设置为“application/json”**,以JSON形式发送请求内容。此参数必须设置为以 JSON 格式发送请求正文。

否则,服务器会返回 HTTP 状态码“400-bad request”:

con.setRequestProperty("Content-Type", "application/json");

2.5. 设置响应格式类型

“Accept”请求标头设置为“application/json”以读取所需格式的响应:

con.setRequestProperty("Accept", "application/json");

2.6. 确保连接将用于发送内容

要发送请求内容,让我们启用URLConnection对象的doOutput属性为true

否则,我们将无法将内容写入连接输出流:

con.setDoOutput(true);

2.7. 创建请求正文

创建自定义 JSON 字符串后:

String jsonInputString = "{"name": "Upendra", "job": "Programmer"}";

我们需要这样写:

try(OutputStream os = con.getOutputStream()) {
    byte[] input = jsonInputString.getBytes("utf-8");
    os.write(input, 0, input.length);
}

2.8. 从输入流中读取响应

获取输入流以读取响应内容。请记住使用 try-with-resources 自动关闭响应流。

通读整个响应内容,并打印最终的响应字符串:

try(BufferedReader br = new BufferedReader(
  new InputStreamReader(con.getInputStream(), "utf-8"))) {
    StringBuilder response = new StringBuilder();
    String responseLine = null;
    while ((responseLine = br.readLine()) != null) {
        response.append(responseLine.trim());
    }
    System.out.println(response.toString());
}

如果响应是 JSON 格式,请使用任何第三方 JSON 解析器,例如Jackson 库、Gsonorg.json 来解析响应。