使用 Retrofit 将查询参数附加到 URL 的开头
Append query parameter to start of URL using Retrofit
我正在尝试使用 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
如何将我的查询参数添加到请求的开头?
我找到了解决方案。
我没有从那里拦截和添加查询参数,而是创建了一个查询映射,并始终将我的 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
我正在尝试使用 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
如何将我的查询参数添加到请求的开头?
我找到了解决方案。 我没有从那里拦截和添加查询参数,而是创建了一个查询映射,并始终将我的 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