如何使用 OkHttp 发布 JSON 数据

Posted

技术标签:

【中文标题】如何使用 OkHttp 发布 JSON 数据【英文标题】:How to POST JSON data using OkHttp 【发布时间】:2021-03-17 04:25:22 【问题描述】:

我在 Kotlin 中使用 OkHttp 将 JSON 数据发布到我的 REST API 端点。但是, JSONParser().parse(request) 给出了错误的请求错误。我认为我使用 OkHttp 传递数据的方式存在一些问题。以下是相关代码:

val url = "http://10.0.2.2:8000/dummy/"

val JSON: MediaType? = MediaType.parse("application/json; charset=utf-8")

val JSONObjectString = "\"name\":\"Mahesh\"" //The data I want to send

var body:RequestBody = RequestBody.create(JSON, JSONObjectString)
val request = Request.Builder().post(body).url(url).build()
val client = OkHttpClient()
client.newCall(request).enqueue(object : Callback 
override fun onResponse(call: Call, response: Response) 
         val tm = response?.body()?.string()
         println(tm)


override fun onFailure(call: Call, e: IOException) 
         Log.d("Failed", "FAILED")
         e.printStackTrace()

)

print(request.data) 上给出:

'name':'Mahesh'

所以请求到达了终点,但是 JSONParser().parse(request) 给出了一个错误的请求错误,我想当数据格式不正确时会发生这种错误。我传递数据的方式有什么问题?

【问题讨论】:

可能 JSONParser().parse(request) 应该是 JSONParser().parse(request.data) 【参考方案1】:

payload 在 request.data 中,因此应该对其进行解析。

JSONParser().parse(request.data)

【讨论】:

以上是关于如何使用 OkHttp 发布 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Retrofit 和 OKHttp 在下一次请求时使缓存路由无效/强制更新?

OkHttp如何获取Json字符串?

使用 POST、OKHttp 将数据从 SQLite 发送到 appServer

如何缓存来自 Web 服务器的 okHTTP 响应?

如何使用 OKHTTP 发出 post 请求?

如何指定 Get-Request 编码(Retrofit + OkHttp)