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

如何使用Volley框架在Android端发送携带请求体的GET请求

问题核心

Volley 默认的网络栈实现仅会为 POST、PUT、PATCH 等类型的请求携带请求体,GET 请求默认会忽略 getBody() 方法的返回值,这是源码中明确的逻辑限制,不是你自定义请求类的写法有问题。

可行的两种解决方案

方案1:修改Volley底层逻辑,无需更换库

你需要自定义实现 HttpStack ,重写请求执行逻辑,让GET请求也支持写入请求体:

  1. 自定义继承自 HurlStack 的类,重写 executeRequest 方法,当检测到GET请求存在非空请求体时,主动设置 HttpURLConnection 的 doOutput = true,并手动将 getBody() 的内容写入连接输出流。
  2. 修正你当前自定义请求类中 getBody() 的实现错误:你目前用 ObjectOutputStream 序列化得到的是Java专属的序列化字节流,和你请求头声明的 application/json 格式不匹配,需要改为将HashMap序列化为JSON字符串后再转字节数组,示例代码:
override fun getBody(): ByteArray {
    return JSONObject(mRequestObject).toString().toByteArray(Charsets.UTF_8)
}
  1. 初始化Volley请求队列时,传入你自定义的HttpStack即可生效。

注意:部分老旧的反向代理、服务端HTTP实现可能不支持GET请求携带请求体,这属于HTTP实现兼容问题,和客户端逻辑无关。

方案2:更换网络库(更推荐)

如果你的项目允许更换依赖,推荐使用OkHttp或者基于OkHttp封装的Retrofit,二者原生支持GET请求携带请求体,不需要修改底层逻辑,适配成本更低。

内容的提问来源于stack exchange,提问作者Сергей Лысёнок

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:54:04