【问题标题】:Append query parameter to start of URL using Retrofit使用 Retrofit 将查询参数附加到 URL 的开头
【发布时间】:2017-03-03 17:32:01
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: java retrofit okhttp3 themoviedb-api


    【解决方案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());
        }
    });
    

    这是服务实现:

    @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
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 2017-04-05
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多