在Retrofit2
里一般通过@Query
注解来给单个请求增加query
参数,也可能需要给每个请求都加上query
参数的场景。
如:Kong
通过Authorization
的JWT
值验证请求合法性。
如果有很多接口,每个接口手动添加@Query
注解是不合理的。最好的方式是拦截所有网络请求,添加query
参数后再发送。
请看下列代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// 添加Query参数
HttpUrl httpUrl = request.url()
.newBuilder()
.addQueryParameter("QueryNameA", "queryValueA")
.addQueryParameter("QueryNameB", "queryValueB")
.build();
// 添加Header参数
Request request = original.newBuilder()
.addHeader("HeaderKeyA", "headerValueA")
.addHeader("HeaderKeyB", "headerValueB")
.url(httpUrl)
.build();
return chain.proceed(request);
});
通过.addQueryParameter(key, val)
,把单个甚至多个键值对添加到请求中,build()
构建HttpUrl
加入Request.Builder
中即可。