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标头参数
将“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库、Gson或org.json)来解析响应。
3. 总结
在本文中,我们学习了如何使用HttpURLConnection使用JSON内容正文发出POST请求。
与往常一样,本教程的完整源代码可在GitHub上获得。
Show Disqus Comments
Post Directory
扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章