处理来自服务的空体响应

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.Responseretrofit.Response 混淆了。尝试在 API 响应中使用 retrofit2.Response 包装器,如下所示:

@POST("xxxxxx")
fun resendBankSlip(@Path("userId") userId: Int): Deferred<retrofit2.Response<Unit>>

之后您可以通过response.code()轻松获取响应代码。

另请注意,我将 Unit 作为 Response 的类型参数传递,因为您不需要正文。在其他情况下,您应该传递实际类型的响应主体。