改造协程状态码 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
}
}
}
我无法从服务器获取响应数据。
我有一个验证场景,如果用户已经存在,服务器会抛出错误, 不知何故,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
}
}
}