我使用了很多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)
}
答案 0 :(得分:3)
此答案假设您将OkHttp
与Retrofit
一起使用。
您必须向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);
}
});