Подтвердить что ты не робот

Есть ли способ установить параметр базового запроса для включения в каждый запрос, сделанный с помощью библиотеки Square Retrofit?

Я использую библиотеку Square Retrofit для коротких сетевых вызовов. Есть несколько частей данных, которые я включаю в качестве параметров @Query для каждого запроса. Например:

@GET("/thingOne.php")
void thingOne(
        @Query("app_version") String appVersion,
        @Query("device_type") String deviceType,
        Callback<Map<String,Object>> callback
);

@GET("/thingTwo.php")
void thingTwo(
        @Query("app_version") String appVersion,
        @Query("device_type") String deviceType,
        Callback<Map<String,Object>> callback
);

Неудобно определять appVersion и deviceType для каждой конечной точки, указанной в Interface. Есть ли способ установить базовый набор параметров, который должен быть включен в каждый запрос? Что-то похожее на то, как мы устанавливаем общий Authorization Header?

RestAdapter restAdapter = new RestAdapter.Builder()
    .setServer("...")
    .setRequestHeaders(new RequestHeaders() {
        @Override
        public List<Header> get() {
            List<Header> headers = new ArrayList<Header>();
                Header authHeader = new Header(
                    "Authorization", "Bearer " + token);
                headers.add(authHeader);
            }
            return headers;
        }
    })
    .build();
this.service = restAdapter.create(ClientInterface.class);
4b9b3361

Ответ 1

Вы можете гарантировать, что все запросы имеют эти параметры запроса, добавив пользовательский RequestInterceptor в ваш RestAdapter

RequestInterceptor requestInterceptor = new RequestInterceptor()
{
    @Override
    public void intercept(RequestFacade request) {
        request.addQueryParam("app_version", "Version 1.x");
        request.addQueryParam("device_type", "Samsung S4");
    }
};

restAdapter.setRequestInterceptor(requestInterceptor)