Retrofit请求未返回预期JSON格式响应问题求助
解决API调用未返回JSON响应的问题
先修正代码中的语法错误
你的代码里Log.d("rr")存在语法错误,Android的Log.d()方法需要传入标签和日志内容两个参数,这会导致编译失败。先把代码修正为可正常运行的版本:
login.enqueue(object : Callback<ResponseBody> { override fun onFailure(call: Call<ResponseBody>, t: Throwable) { // serverLoader.value = false Log.d("rr", "请求失败:${t.message}") } override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) { Log.d("rr", "响应状态码:${response.code()}") // 打印响应头里的内容类型 Log.d("rr", "响应Content-Type:${response.headers()["Content-Type"]}") response.body()?.let { val responseContent = it.string() Log.d("rr", "响应内容:$responseContent") } ?: run { Log.d("rr", "响应体为空") } } })
具体排查方向
- 验证请求是否成功:通过
response.isSuccessful判断请求状态(状态码在200-299区间为成功),如果请求失败,服务器大概率返回错误页(如HTML格式)而非JSON。 - 确认服务器返回的内容类型:查看打印出的响应头
Content-Type,确认是否为application/json。如果不是,说明服务器未返回JSON数据,可能是请求参数错误、接口地址有误或服务器内部异常。 - 核对请求配置:检查请求的URL、请求方法(GET/POST)、参数格式是否完全符合API文档要求——即便你设置了
Content-Type: application/json,参数格式不匹配也会导致服务器返回非JSON响应。 - 分析响应内容:通过修正后的日志查看实际返回内容(比如HTML错误提示、文本信息),根据具体内容定位问题。
(注:你提供的图片显示了带有"Error"字样的错误页面内容,说明服务器确实返回了非JSON格式的错误响应,建议按上述步骤逐一排查)
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

