2017-03-03 16 views
1

Retrofitを使用してTheMovieDB APIを実装しようとしていますが、クエリの先頭にapiキーを追加できません。これは、TheMovieDBがクエリ開始時にAPIキーを要求する伝統的な方法を持っているため、ここでは誤りがあるように感じます。Retrofitを使用してURLの開始にクエリパラメータを追加します。

リクエストをインターセプトしてクエリパラメータを追加しようとすると、リクエストの最後に追加されますが、これは必要ではありません。

private class WebApiAuthenticator implements RequestInterceptor { 
    @Override 
    public void intercept(RequestFacade request) { 
     if (apiKey != null) { 
      request.addEncodedQueryParam(PARAM_API_KEY, apiKey); 
     } 
    } 
} 

とサービスの実装:

@GET("/search/multi&query={query}") 
    void getSearchResults(@Path("query") String query, Callback<String> callback); 

これは、この結果を生成します。

---> HTTP GET https://api.themoviedb.org/3/search/multi&query=mysearchquery?api_key=thisismyapikey 

私はこの結果をしたい:

---> HTTP GET https://api.themoviedb.org/3/search/multi?api_key=thisismyapikey&query=mysearchquery 

は、どのように私は私の追加について行きますthの先頭にクエリパラメータeの代わりにリクエスト?

答えて

1

解決策が見つかりました。 代わりに傍受し、そこからクエリパラメータを追加するので、私は、クエリ地図作成といつものように、私の検索クエリと一緒に、クエリマップ内のサービスに自分のAPIキーを渡します

Map<String, String> data = new HashMap<>(); 
data.put("api_key", apiKey); 
data.put("query", "avengers"); 
movieService.getSearchResults(data, new Callback<String>() 
{ 
    @Override public void success(final String s, final Response response) { 
    System.out.println(s); 
    } 

    @Override public void failure(final RetrofitError error) { 
     LOGGER.log(Level.WARNING, error.getResponse().getReason()); 
    } 
}); 

をそして、これはありますサービスの実装:

---> HTTP GET https://api.themoviedb.org/3/search/multi?api_key=myapikey&query=avengers 
:これは、結果を生成

@GET("/search/multi") 
void getSearchResults(@QueryMap Map<String, String> queries, Callback<String> callback); 

関連する問題