我正在尝试使用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不要期望这个方法的响应主体,仍然可以访问响应状态,标题和其他细节?
答案 0 :(得分:2)
更新:从第二个测试版开始,您可以使用返回类型Void
@PUT('/acknowledgeStatus')
Call<Void> acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)
以下情况仍有效,但可能效率较低 -
尝试告诉您需要ResponseBody
。
@PUT('/acknowledgeStatus')
Call<ResponseBody> acknowledgeStatus(@Body Acknowledgement idsToAcknowledge)
将允许您访问响应状态等,以及原始响应正文(如果有)。