改造协程状态码 205 Body Null

Retrofit Coroutine Status Code 205 Body Null

我无法从服务器获取响应数据。

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

问题是每次我调用 API、body() 和 errorBody() returns null 按照建议,我使用 Response 来获取响应。

isSuccessful() return 为真,我可以在我的 logcat 上看到来自服务器的原始 Json 响应 但是 return 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
        }
    }
}