【问题标题】:adding a header to all requests in the retrofit factory?为改造工厂中的所有请求添加标头?
【发布时间】:2020-10-18 20:22:25
【问题描述】:

我有这个工厂用于应用程序中的所有传出请求,是否可以在此处添加标头(应用程序版本)而不是所有请求? 我看到的其他例子似乎都对工厂使用了不同的语法,我认为它是一个旧的,但我不确定

object RetrofitFactory {

    val makeRetrofitService: RetrofitService by lazy {
        val interceptor = HttpLoggingInterceptor()
        interceptor.level = HttpLoggingInterceptor.Level.BODY
        val client = OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .build()

        Retrofit.Builder()
            .baseUrl("${CustomURI.BaseWebsite}/")
            .addConverterFactory(GsonConverterFactory.create(GsonBuilder().create()))
            .client(client)
            .build().create(RetrofitService::class.java)
    }

}

【问题讨论】:

  • 您可以创建一个添加标头的 OkHttp 拦截器,然后将该拦截器添加到您的 OkHttpClient.Builder

标签: android kotlin retrofit2


【解决方案1】:

您可以向 OkHttpClient 添加多个拦截器。 它应该是这样的: 这是你的日志拦截器:

    val interceptor = HttpLoggingInterceptor()
    interceptor.level = HttpLoggingInterceptor.Level.BODY

这是一个标题

OkHttpClient.Builder().apply {
        addInterceptor { chain ->
            val request = chain.request()
            val builder = request
                .newBuilder()
                .header("SOME", "SOME")
                .method(request.method(), request.body())
            val mutatedRequest = builder.build()
            val response = chain.proceed(mutatedRequest)
            response
        }
        addInterceptor(interceptor) // this is your http logging
    }.build()

用您的首选值更改 SOME 和 SOME。

【讨论】:

    【解决方案2】:

    我找到了这个解决方案,你可以使用 Interceptor 添加它

    在此链接How to define a Header to all request using Retrofit?

    RequestInterceptor requestInterceptor = new RequestInterceptor() {
      @Override
      public void intercept(RequestFacade request) {
        request.addHeader("User-Agent", "Retrofit-Sample-App");
      }
    };
    
    RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .setRequestInterceptor(requestInterceptor)
    .build();
    

    【讨论】:

    • RequestInterceptor 和 RequestFacade 不是我的 ide 正在识别的类
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 2011-05-04
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多