Kotlin OkHttp Retrofit2添加全局Header报addHeader未引用错误如何解决
报错原因
OkHttpClient.Builder 类本身没有提供addHeader方法,该方法是Request.Builder的专属方法,因此直接在OkHttpClient构建器中调用会报未找到引用的错误。要实现全局为所有请求添加自定义Header的需求,需要通过自定义拦截器实现。
解决方法
在OkHttpClient中添加自定义拦截器,拦截所有发出去的请求,统一为请求添加自定义Header后再执行请求。如果需要日志拦截器能够打印出你添加的自定义Header,要将自定义Header拦截器的添加顺序放在日志拦截器之前。
完整修改后代码
package com.app.name.data import com.app.name.BuildConfig import com.app.name.data.source.remote.APPService import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.scalars.ScalarsConverterFactory object MicroApiClient { private val loggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY) private val okHttpClient = OkHttpClient.Builder() // 自定义Header拦截器,放在日志拦截器之前可以让日志打印出添加的Header .addInterceptor { chain -> val originalRequest = chain.request() val requestWithHeader = originalRequest.newBuilder() .addHeader("x-api-key", BuildConfig.AWS_MICROSERVICES_API_KEY) // 如需添加更多Header,在此处继续调用addHeader即可 .build() chain.proceed(requestWithHeader) } .addInterceptor(loggingInterceptor) .build() val instance: APPService by lazy { val retrofit = Retrofit.Builder() .baseUrl(BuildConfig.AWS_MICROSERVICES_HOST) .addConverterFactory(GsonConverterFactory.create()) .addConverterFactory(ScalarsConverterFactory.create()) .client(okHttpClient) .build() retrofit.create(APPService::class.java) } }
补充说明
- 如果你需要覆盖请求中已存在的同名Header,将
addHeader替换为header方法即可 - 该方式添加的Header会自动应用到当前OkHttpClient实例发起的所有请求中
内容的提问来源于stack exchange,提问作者Funtriaco Prado
相关产品推荐
相关产品推荐

