You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:54:23