我有用于身份验证的自定义拦截器:
@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.
关于android - 改造 2 : Custom annotations for custom interceptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47760861/