使用Retrofit将查询参数附加到URL的开头

时间:2017-03-03 17:32:02

标签: java retrofit okhttp3 themoviedb-api

我正在尝试使用Retrofit实现TheMovieDB API,但我无法将api密钥附加到查询的开头。感觉就像TheMovieDB在查询开始时有一种非传统的方式要求api密钥一样。

当试图拦截请求并添加查询参数时,它会被附加到请求的末尾,这不是我想要的。

    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

如何将查询参数添加到请求的开头呢?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。 我没有从那里拦截和添加查询参数,而是创建了一个查询地图,并始终将我的api密钥与查询地图一起传递给服务,如下所示:

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

这是服务实现:

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

这会产生结果:

 public class Questions {

    ArrayList<String> questionsList = new ArrayList<>();


    public Questions(String question,String answer) {

        questionsList.add(question);
        questionsList.add(answer);

    }

    public ArrayList<String> getQuestionsList() {
        return questionsList;
    }
}