Retrofit配置headers无效的可能原因

操作一个Retrofit的步骤一般是这样的

  • 创建一个网络拦截器,添加一些通用的headers
Interceptor interceptor = new Interceptor() {
            @Override
            public Response intercept(Chain chain) throws IOException {
                Request original = chain.request();
                Request request = original.newBuilder()
                        .addHeader("xxx", "xxx")
                        .addHeader("xxx", "xxx")
                        .addHeader("Content-Type", "application/json")
                        .method(original.method(), original.body())
                        .build();
                return chain.proceed(request);
            }
        };
  • 创建一个打印请求日志的拦截器
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(BuildConfig.DEBUG ? 
                HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE);
  • 在OKHttpClient中加入创建的拦截器
OkHttpClient okHttpClient= new OkHttpClient.Builder()
                .addInterceptor(interceptor) // 添加headers拦截器
                .addInterceptor(mHttpLoggingInterceptor)// 添加log拦截器
                .readTimeout(8000, TimeUnit.MILLISECONDS)
                .writeTimeout(8000, TimeUnit.MILLISECONDS)
                .build();

其实我们看上面的addInterceptor方法好像是并列的,至于哪个拦截器在前,哪个在后,应该无所谓。但是事实是,如果吧mHttpLoggingInterceptor放前面,则后面的interceptor添加的heanders将不会生效。当我们使用addInterceptor来添加网络拦截器时,一定要把网络拦截器放前面

  • 使用addNetworkInterceptor
    当我们使用网络请求方面的拦截器时,直接使用addNetworkInterceptor方法来添加,而不要使用addInterceptor来添加。

你可能感兴趣的:(Retrofit配置headers无效的可能原因)