繁体   English   中英

Retrofit 协程状态码 205 正文 Null

[英]Retrofit Coroutine Status Code 205 Body Null

我很难从服务器获取响应数据。

我有一个验证场景,如果用户已经存在,服务器会抛出错误,不知何故,api 开发人员决定使用 205 作为状态码而不是通常的 200。

问题是每次我调用 API 时,body() 和 errorBody() 都会返回 null 正如建议的那样,我使用 Response 来获取响应。

isSuccessful() 正在返回 true,我可以在我的 logcat 上看到来自服务器的原始 Json 响应,但在 body() 和 errorBody() 上返回 null,知道这里的错误是什么吗?

提前致谢。

override suspend fun safeRegisterAccount(registerBody: RegisterBody): LiveData<out Wrapper<RegisterResponse>?> {
        val result = MutableLiveData<Wrapper<RegisterResponse>>()
        try {
            val account = networkService.safeRegister(registerBody)
            val wrapper = Wrapper<Token>()  
            wrapper.objectData = account.body()?.objectData
            wrapper.status = account.code()
            result.postValue(wrapper)
        } catch (ex: Exception) {
            plantLog(ex.message)
        }

        return result
    }

如果状态码为 204 或 205,Retrofit 会跳过转换器。

您可以尝试添加一个 OkHttp 拦截器,它会在 Retrofit 处理它之前将服务器的 205 代码转换为 200。

像这样:

class BodyInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val response = chain.proceed(chain.request())

        if (response.code == 204 || response.code == 205) {
            return response
                .newBuilder()
                .code(200)
                .body(response.body)
                .build()
        } else {
            return response
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM