Как обрабатывать ответ «Нет содержимого» с помощью RxJava2 и Retrofit2

Я использую RxJava 2 и Retrofit 2 (https://github.com/JakeWharton/retrofit2-rxjava2-adapter), и мне было интересно, как справиться с типом отсутствия ответа (204). В rxjava1 я использовал Observable<Void>, но rxjava2 больше не разрешает это (https://github.com/ReactiveX/RxJava/wiki/What -> Нули)

Прямо сейчас я взломал, чтобы обойти синтаксический анализ Json для пользовательского типа (я назвал его NoContent), но мне было интересно, есть ли лучший способ.

РЕДАКТИРОВАТЬ:

public class NoContent {
    public static class GsonTypeAdapter extends TypeAdapter<NoContent> {

        @Override
        public void write(JsonWriter out, NoContent value) throws IOException {
           out.nullValue();
        }

        @Override
        public NoContent read(JsonReader in) throws IOException {
           return new NoContent();
        }
    }
}

person Romain    schedule 21.11.2016    source источник
comment
У меня аналогичная проблема, есть решение?   -  person Zulqurnain Jutt    schedule 22.01.2017
comment
Не то, чтобы я знал об этом;   -  person Romain    schedule 23.01.2017


Ответы (1)


Вы можете использовать Completable, Observable<ResponseBody> или Observable<Response<T>> в том случае, если вы собираетесь получить 204 ответов без получения исключений преобразователя.

Вероятно, лучшим вариантом здесь будет использование Completable в качестве возвращаемого типа. Все 2xx ответы от сервера будут заканчиваться onComplete. Другой окажется в onError.

В случае ResponseBody все допустимые HTTP-ответы не будут преобразованы в объект и попадут в onNext, включая ответы 4xx и 5xx.

В случае Response<T> будут преобразованы только ответы 2xx, включая, возможно, код ответа HTTP 204. Поэтому я не уверен, что вам следует его использовать, хотя все действительные ответы HTTP в этом случае также будут заканчиваться onNext, включая ответы 4xx и 5xx.

person Клаус Шварц    schedule 24.08.2017