Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

Как вернуть мета информацию из HEAD запроса используя Retrofit2?

Для взаимодействия с сервером использую ретрофит. Есть GET запрос который возвращает огромное кол-во данных. Чтобы каждый раз не съедать трафик клиента нужно проверять обновились ли данные га сервере. Для этого использую HEAD запрос к тому же эндпоинту. Проблема в том что HEAD запрос в Call<> можно положить только Void иначе выкидывает эксепшен. А при таком запросе в колбэк ничего не возвращается, так как у этого запроса нет респонса. Немного погуглив я нашел способ все же получить нужную мне метаинформацю из хедеров в Interceptor.
chain.proceed(request).header("etag"))
Но тут меня настигла очередная проблема, как без колбэка передать этот "етаг" туда откуда был сделан реквест? Должен же быть какой нибудь адекватный/элегантный способ?


Ответ

Retrofit2 корректно возвращает респонс в коллбек при HEAD запросах. Данный код у меня отлично работает:
Call c = service.headRequest(url);
c.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { response.headers(); }
@Override public void onFailure(Call call, Throwable t) {
} });
response не пустой и содержит в себе хедэры response.headers(). Если в вашем случае это не работает, то возможно, что проблема в сервере, который некорректно обрабатывает HEAD запросы.

Комментариев нет:

Отправить комментарий