Android中如何使用Java发起携带JSON请求体的HTTP POST请求
基于HttpURLConnection实现POST请求携带JSON请求体
你提供的Android官方示例已经搭好了网络请求的基础框架,只需要补充请求方法声明、请求头配置、JSON内容写入逻辑,就能实现传JSON格式请求体的POST接口调用,核心调整点如下:
- 显式设置请求方法为
POST,HttpURLConnection默认发起的是GET请求 - 添加
Content-Type请求头,值设为application/json; charset=utf-8,告知服务端当前请求体是JSON格式、采用UTF-8编码 - 构造好JSON格式的请求参数字符串,转成UTF-8编码的字节数组后写入连接的输出流即可,不需要额外自定义
writeStream方法 - 写完请求体后记得刷新、关闭输出流,再读取服务端返回的响应内容
完整可参考的实现代码如下:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; // 注意:Android平台禁止在主线程发起网络请求,这段逻辑必须放在子线程、协程或工作任务中执行 public class HttpPostDemo { public static void postJsonRequest() throws Exception { // 替换为实际要调用的API接口地址 URL url = new URL("https://your-real-api-address.com/api/action"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { // 基础请求配置 urlConnection.setRequestMethod("POST"); urlConnection.setDoOutput(true); urlConnection.setDoInput(true); urlConnection.setConnectTimeout(15000); urlConnection.setReadTimeout(15000); // 设置JSON格式请求头 urlConnection.setRequestProperty("Content-Type", "application/json; charset=utf-8"); // 构造JSON请求体:实际开发推荐用Gson、Moshi等序列化库把Java参数对象直接转成JSON字符串,不要手动拼接避免格式错误 String requestJson = "{\"userName\":\"zhangsan\",\"age\":25,\"isVip\":true}"; // 写入JSON请求体 try (OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream())) { out.write(requestJson.getBytes(StandardCharsets.UTF_8)); out.flush(); } // 处理响应 int responseCode = urlConnection.getResponseCode(); if (responseCode == HttpURLConnection.HTTP_OK) { try (InputStream in = new BufferedInputStream(urlConnection.getInputStream())) { // 在这里实现自己的响应读取逻辑,将输入流解析为需要的字符串或业务对象 // readStream(in); } } } finally { urlConnection.disconnect(); } } }
注意事项:如果请求体内容较大,可以保留示例中的
setChunkedStreamingMode(0)配置开启分块传输;如果是普通小参数的JSON请求,不需要开启该配置,避免部分服务端对分块请求兼容性差导致的异常。
内容的提问来源于stack exchange,提问作者MONSEF OT
相关产品推荐
相关产品推荐

