Обработка ответов Void и Non-Void с помощью Retrofit 2 и RxJava 2

У меня есть вызов для отправки данных на сервер. Если все в порядке, сервер возвращает пустой ответ. Но когда возникает ошибка, я получаю данные обратно.

Чтобы справиться с ошибкой, у меня есть объект CustomResponse. Проблема в том, что при успешном выполнении запроса Retrofit выдает исключение с сообщением: java.io.EOFException: End of input at line 1 column 1 path $

Вот звонок:

@POST("/updateObject")
Observable<CustomResponse> updateObject(@Body CustomObject requestData);

Я провел небольшое исследование и прочитал, что могу использовать Observable<Response<Void>> ..., но в таком случае как мне управлять, когда ответ содержит данные?


person Eselfar    schedule 21.06.2017    source источник
comment
каков фактический ответ, когда он успешен? неужели тела совсем нет?   -  person TooManyEduardos    schedule 21.06.2017
comment
Ответ: OkHttp: <-- END HTTP (0-byte body) так что на самом деле тела нет.   -  person Eselfar    schedule 21.06.2017
comment
Возможный дубликат Как мне обработать пустое тело ответа с помощью Retrofit 2?   -  person Sebastian    schedule 15.08.2017
comment
@NoActivity.java Это частично решает проблему. Я лично решил это, используя этот ответ   -  person Eselfar    schedule 15.08.2017


Ответы (1)


Я не пробовал это сам, но я бы начал с создания класса-оболочки, в котором ваш CustomResponse имеет значение NULL.

Что-то вроде этого:

public class SomeWrapper {
    @Nullable CustomResponse customResponse;
}

Затем в вашем вызове Retrofit/Rx вы можете изменить его на это:

@POST("/updateObject")
Observable<SomeWrapper> updateObject(@Body CustomObject requestData);

дать, что выстрел, и дайте мне знать, если это работает.

person TooManyEduardos    schedule 21.06.2017
comment
Спасибо, но это не работает. Retrofit пытается разобрать JSON, но из-за отсутствия тела это все равно не удается. - person Eselfar; 21.06.2017