Android Retrofit Interceptor拦截器统一设置请求头Header

魔法少女 2024-06-06 ⋅ 27 阅读

在Android开发中,常常需要在每个网络请求中设置相同的请求头Header,用于实现统一的身份验证、参数传递等功能。而使用Retrofit库时,我们可以通过拦截器Interceptor来实现统一设置请求头的功能。

1. 添加依赖

首先,在您的项目中添加Retrofit的依赖。在app的build.gradle文件中,添加以下代码:

dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
}

2. 创建Interceptor

创建一个Interceptor类,用于设置请求头Header。您可以根据自己的需求来设置请求头的内容。

public class HeaderInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request originalRequest = chain.request();
        
        // 添加请求头Header
        Request.Builder builder = originalRequest.newBuilder()
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer your_token")
                .header("User-Agent", "YourApp/1.0");
        
        Request newRequest = builder.build();
        
        return chain.proceed(newRequest);
    }
}

3. 添加Interceptor到Retrofit中

在创建Retrofit实例时,通过调用addInterceptor()方法,将Interceptor添加到Retrofit中。

OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();

// 添加拦截器
httpClientBuilder.addInterceptor(new HeaderInterceptor());

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("https://api.example.com/")
        .client(httpClientBuilder.build())
        .addConverterFactory(GsonConverterFactory.create())
        .build();

在上述代码中,我们通过addInterceptor()方法将自定义的Interceptor添加到了OkHttpClient中,然后将OkHttpClient作为参数传递给Retrofit构建器。

4. 使用统一设置的请求头

现在,您可以在每个网络请求的接口方法上省略设置请求头的代码。例如:

public interface ApiService {
    @GET("users/{userId}")
    Call<User> getUser(@Path("userId") String userId);
}

上述代码中的getUser()方法没有设置任何请求头,但由于我们在Interceptor中统一设置了请求头,所以在实际的网络请求中,这些请求头会被自动添加进去。

总结

使用Retrofit的Interceptor拦截器,我们可以在每个网络请求中统一设置请求头Header。这种方式可以减少重复代码,并且使得代码更加清晰易维护。希望本文对于您在Android开发中使用Retrofit设置请求头有所帮助。

参考链接


全部评论: 0

    我有话说: