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

Retrofit结合协程调用POST API无法获取正常返回结果的问题求助

问题根因初步定位

你的日志明确显示接口返回HTTP 500状态码且响应体为空,这属于服务端内部处理请求出错的范畴,和你客户端的协程、Retrofit调用逻辑本身没有直接关联,但你当前的代码存在几个明显错误会掩盖真实问题,可按以下步骤逐一排查修复:

客户端代码问题修复
  • 首先修复DataSource中的错误分支逻辑:你当前在请求返回非2xx成功码时,依然强制返回Result.Success(serverResponse.body()!!),500响应的body本身为空,这里会直接触发空指针异常,且完全掩盖了错误状态。修改后的代码如下:
suspend fun sendDetail(token: String, data: SubPropertyData): Result<AddUpdateDataResponse> {
    val serverResponse: Response<AddUpdateDataResponse>
    return try {
        serverResponse = serverApi.sendDetail(token,data)
        if(serverResponse.isSuccessful) {
            val body = serverResponse.body()
            return if (body != null) {
                Result.Success(body)
            } else {
                Result.Error(IOException("响应体为空,HTTP状态码:${serverResponse.code()}"))
            }
        } else {
            // errorBody的内容只能读取一次,调用string()后流会关闭,不要重复读取
            val errorMsg = serverResponse.errorBody()?.string() ?: "无错误响应内容,HTTP状态码:${serverResponse.code()}"
            Log.e("what-code ", errorMsg)
            Result.Error(IOException("请求失败:$errorMsg"))
        }
    } catch (e: Throwable) {
        if(e is NoConnectivityException)
            Result.Error(IOException(AppConstant.INTERNET_ERR_MSG))
        else
            Result.Error(IOException(e.localizedMessage ?: "未知请求错误"))
    }
}
  • 检查接口路径大小写是否匹配:你在API注解中写的路径是api/addOrUpdateSubjectPropertyDetail,但实际请求日志里的路径是api/AddOrUpdateSubjectPropertyDetail,首字母A大写,部分服务端对路径大小写敏感,会导致无法匹配接口触发500或404,确认服务端接口路径的大小写要求后修改注解即可。
  • 检查请求参数是否符合服务端要求:你提交的JSON里countyName 字段末尾多了一个空格,检查服务端要求的字段名是否为不带空格的countyName,参数名不匹配会导致服务端反序列化参数失败触发500。
服务端排查方向

修复完客户端问题后如果依然返回500,可按以下方向验证:

  • 确认Authorization令牌是否有效,是否已过期或权限不足
  • 把日志里打印的完整请求参数、请求头复制到Postman等工具中直接请求接口,如果Postman请求也返回500,直接联系服务端开发排查接口内部错误即可。

内容的提问来源于stack exchange,提问作者Andrain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:04