Retrofit初探——请求参数

来源:互联网 发布:湖南云箭集团知乎 编辑:程序博客网 时间:2024/06/04 00:40

0x00 请求参数

常见的Http请求,除了指定的请求地址,很多时候我们还需要加上一些请求参数,这些参数可能是固定的,也可能是动态添加的。在Retrofit中,我们该如何处理呢?这里以GET方式中添加请求参数为例。

0x01 固定请求参数

这里说的固定请求参数是指每次请求我们都在Url中添加相同的请求的参数。这种场景多出现在需要认证的情况,比如添加 Token 字段等。

在之前的文章中,我们有提到在构建OkHttpClient对象的时候使用过 Interceptor ,在 Interceptor 的逻辑中,我们会重新创建一个 Request 对象,在这个对象中我们可以传入一个 HttpUrl ,在这个对象中,我们可以传入一些需要的请求参数。通过之前对 Interceptor 了解,我们应该知道,这里做的操作是对所有的请求都有效的。这样就可以完成我们为每个请求添加固定请求参数的目的。代码如下:

OkHttpClient client = new OkHttpClient.Builder()                .addInterceptor(new Interceptor() {                    @Override                    public okhttp3.Response intercept(Chain chain) throws IOException {                        Request original = chain.request();                        HttpUrl originalHttpUrl = original.url();                        HttpUrl url = originalHttpUrl                                .newBuilder()                                .addQueryParameter("token", "I_am_user_token")                                .addQueryParameter("user_key", "I_am_user_user_key")                                .build();                        Request request = original                                .newBuilder()                                .url(url)                                .build();                        okhttp3.Response response = chain.proceed(request);                        return response;                    }                })                .build();

0x02 动态请求参数

这个指我们在不同的请求中添加不同过的请求参数。比如,在请求用户信息的接口中我们可能需要传入用户ID,在请求记录的接口中我们需要传入起止时间等。由于这样的参数是针对接口的,因此我们就需要在每一个接口做中处理。

  • @Query 添加一个请求参数

    // http://119.29.29.29/d?dn=ttdevs.vicp.com@GET("/d")public Call<ResponseBody> singleParams(@Query("dn") String domain);

    通过上面的方式,我们发出的请求就是:

    http://119.29.29.29/d?dn={domain}

  • @QueryMap 添加一组请求参数

    @GET("/record")public Call<ResponseBody> multiParams(@QueryMap(encoded = true) Map<String, String> options);

    上面我们发出的请求是:

    http://ttdevs.vicp.net/record?p1=v1&p2=v2

    这个这个例子中还可以看到,我们使用了一个参数:encoded = true,这个参数的意思是,对我们的参数进行URL
    Encode。

0x03 总结

通过上面的介绍,我们可以了解,如果添加我们的请求参数。当需要给每一个请求都添加相同参数时该如何封装,把Retrofit打造成更适合我们使用的工具。

—— EOF ——

2 0
原创粉丝点击