如何指定API方法没有响应主体?

时间:2015-09-30 18:49:06

标签: retrofit

我正在尝试使用Retrofit 2.0和converter-jackson模块来使用API​​。

我有一些GET方法来获取某些对象的状态,并将接收到的有效负载转换为对象。

我还有一个端点,我需要PUT才能确认我已经处理了返回给GET请求的对象。这个PUT方法不返回正文,只要状态为200,如果一切正常或者是相应的错误代码。

我尝试了几种不同的方法在我的Retrofit界面中指定put方法但没有成功。我收到这样的错误:

com.fasterxml.jackson.databind.JsonMappingException: No content to map due to end-of-input
 at [Source: java.io.InputStreamReader@1d5ef9ae; line: 1, column: 1]

如果我将方法的返回类型指定为某些我不希望收到的对象,如下所示:

@PUT('/acknowledgeStatus')
Call<String> acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)

我得到这样的错误:

java.lang.IllegalArgumentException: Could not locate call adapter for class com.example.MyObject. Tried:
 * retrofit.DefaultCallAdapter$1

当我尝试定义PUT方法时,MyObject是我的一个Retrofit API的其他GET方法返回的对象:

@PUT('/acknowledgeStatus')
Call acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)

@PUT('/acknowledgeStatus')
Response acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)

如何告诉Retrofit不要期望这个方法的响应主体,仍然可以访问响应状态,标题和其他细节?

1 个答案:

答案 0 :(得分:2)

更新:从第二个测试版开始,您可以使用返回类型Void

@PUT('/acknowledgeStatus')
Call<Void> acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)

以下情况仍有效,但可能效率较低 -

尝试告诉您需要ResponseBody

@PUT('/acknowledgeStatus')
Call<ResponseBody> acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)

将允许您访问响应状态等,以及原始响应正文(如果有)。