android - 改造 2 : Custom annotations for custom interceptor

标签 android retrofit2 interceptor okhttp

我有用于身份验证的自定义拦截器:

@Named("authInterceptor")
    @Provides
    @Singleton
    fun providesAuthInterceptor(preferencesManager: PreferencesManager): Interceptor {
        return Interceptor { chain ->
            val newBuilder = chain.request().newBuilder()
            newBuilder.addHeader("access-token", preferencesManager.getAccessToken())
            val request = newBuilder.build()
            return@Interceptor chain.proceed(request)
        }
    }

但我有一些不需要授权 header 的调用。

我希望在我的服务中有:

interface NetService {
    @NEEDAUTH
    @GET("users")
    fun getAllShops(key: String): Single<SomeResponse>

    @FormUrlEncoded
    @POST("users")
    fun register(@Field("nickname") nickname: String): Single<SomeResponse>
}

因此,第一个调用将使用 authInterceptor,第二个将不会使用它。

最佳答案

从Retrofit 2.6.0版本开始,可以通过tag字段获取OkHttp Interceptor中的注解,如下所示:

response.request.tag(Invocation::class.java)?.method()?.getAnnotation(YourAnnotation::class.java)

然后在拦截器内部,您可以验证请求是否被注释。

改造变更日志:

New: @Tag parameter annotation for setting tags on the underlying OkHttp Request object. These can be read in CallAdapters or OkHttp Interceptors for tracing, analytics, varying behavior, and more.

https://github.com/square/retrofit/pull/2899/files

关于android - 改造 2 : Custom annotations for custom interceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47760861/

相关文章:

Android主项目与库项目-如何在项目之间传递设置

java - 在 Kotlin 中改造单例

android - Retrofit 2 + rx - 如何在 android 中检查响应来源(网络、缓存或两者)?

java - Spring REST api 中缺少 header 时如何返回响应正文

hadoop - 使用 Flume Serializer 生成复合 hbase rowkey

java - Android-创建循环垫的信息-音乐应用

java - 程序启动时 (Android) 中的所有字符串(在 .java 中)都存储在 RAM 中吗?

Android - OkHttp 拦截器调用 onFailure

android - 将 C 程序迁移到 Android NDK

android - OnSuccess 响应不会在 Kotlin 中使用改造