如何将静态参数添加到选定的GET Retrofit调用?

时间:2017-04-07 14:22:25

标签: android parameters retrofit

我使用了很多Retrofit调用(GET,PUT,DETELE等)。我知道,我可以为所有呼叫执行此操作,但我必须将其设置为仅用于GET呼叫。但是现在我必须为所有GET调用添加一个静态参数,最好的方法是什么?

我的电话示例:

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort);

我需要为所有GET添加参数: 的&安培;东西=真

我试图以这种方式添加,但这需要修复对interface的所有调用:

public interface ApiService {

    String getParameterVariable = "something"
    boolean getParameterValue = true

    @GET("user")
    Call<User> getUser(@Header("Authorization") String authorization,
                       @Query(getParameterVariable) Boolean getParameterValue)

}

1 个答案:

答案 0 :(得分:3)

此答案假设您将OkHttpRetrofit一起使用。

您必须向OkHttpClient实例添加拦截器,以过滤所有GET个请求并应用查询参数。 你可以这样做:

// Add a new Interceptor to the OkHttpClient instance.
okHttpClient.interceptors().add(new Interceptor() {
    @Override
    public okhttp3.Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        // Check the method first.
        if (request.method().equals("GET")) {
            HttpUrl url = request.url()
                    .newBuilder()
                    // Add the query parameter for all GET requests.
                    .addQueryParameter("something", "true")
                    .build();

            request = request.newBuilder()
                    .url(url)
                    .build();
        }
        // Proceed with chaining requests.
        return chain.proceed(request);
    }
});