2013-07-10 10 views
26

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

@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); 

ответ

54

Вы можете гарантировать, что все запросы имеют эти параметры запроса путем добавления пользовательского 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) 
+1

является [это] (http://developer.android.com/reference/org/apache /http/HttpRequestInterceptor.html), о чем вы говорите? Кажется, я не могу найти ссылку на класс под названием RequestInterceptor. Или в RequestFacade. А RestAdapter не имеет метода 'setRequestInterceptor'. Можете ли вы предоставить более подробную информацию? –

+0

У вас должна быть старая версия Модернизации. Если вы обновите его до версии 1.1.1, вы увидите их. http://square.github.io/retrofit/javadoc/retrofit/RequestInterceptor.html – Erich

+1

@kdubb: Как мне это сделать для тела? У меня есть POST, которые принимают полезную нагрузку json. Благодаря! – dannyroa