处理来自服务的空体响应
Handle empty body response from service
我正在尝试通过 POST 调用服务,向用户发送电子邮件,正文总是 return 空,我必须处理响应代码。
例如204 = 成功。
我正在尝试以这种方式处理,但我没有成功
服务:
@POST("xxxxxx")
fun resendBankSlip(@Path("userId") userId: Int): Deferred<Response>
视图模型:
scope.launch {
try {
_loading.value = true
val response = repository.sendEmail(userId)
if (!response.isSuccessful) {
_error.value = R.string.generic_error_message
}
} catch (e: Throwable) {
_error.value = R.string.generic_error_message
} finally {
_loading.value = false
}
}
错误发生在val response = repository.sendEmail(userId)
异常:
java.lang.IllegalArgumentException: 'okhttp3.Response' is not a valid response body type. Did you mean ResponseBody?
for method EmailService.sendEmail
有什么想法吗?
您可能将 okhttp3.Response
与 retrofit.Response
混淆了。尝试在 API 响应中使用 retrofit2.Response
包装器,如下所示:
@POST("xxxxxx")
fun resendBankSlip(@Path("userId") userId: Int): Deferred<retrofit2.Response<Unit>>
之后您可以通过response.code()
轻松获取响应代码。
另请注意,我将 Unit
作为 Response
的类型参数传递,因为您不需要正文。在其他情况下,您应该传递实际类型的响应主体。
我正在尝试通过 POST 调用服务,向用户发送电子邮件,正文总是 return 空,我必须处理响应代码。 例如204 = 成功。
我正在尝试以这种方式处理,但我没有成功
服务:
@POST("xxxxxx")
fun resendBankSlip(@Path("userId") userId: Int): Deferred<Response>
视图模型:
scope.launch {
try {
_loading.value = true
val response = repository.sendEmail(userId)
if (!response.isSuccessful) {
_error.value = R.string.generic_error_message
}
} catch (e: Throwable) {
_error.value = R.string.generic_error_message
} finally {
_loading.value = false
}
}
错误发生在val response = repository.sendEmail(userId)
异常:
java.lang.IllegalArgumentException: 'okhttp3.Response' is not a valid response body type. Did you mean ResponseBody?
for method EmailService.sendEmail
有什么想法吗?
您可能将 okhttp3.Response
与 retrofit.Response
混淆了。尝试在 API 响应中使用 retrofit2.Response
包装器,如下所示:
@POST("xxxxxx")
fun resendBankSlip(@Path("userId") userId: Int): Deferred<retrofit2.Response<Unit>>
之后您可以通过response.code()
轻松获取响应代码。
另请注意,我将 Unit
作为 Response
的类型参数传递,因为您不需要正文。在其他情况下,您应该传递实际类型的响应主体。