gpt4 book ai didi

kotlin - 改造为所有端点插入相同的查询参数

转载 作者:行者123 更新时间:2023-12-04 08:11:22 25 4
gpt4 key购买 nike

我有要在所有改造服务中插入的 token 参数。
目前所有每个请求,我插入一个 @QueryMap

    @GET("resources/{resourceId}")
suspend fun request(
@Path("resourceId") resId: Int,
@QueryMap tokens: Map<String, String>
): Response
这样 https://baseurl.com/resources?key1=value1&key2=value2
Map 值是常量 () 例如: 键1=值1&键2=值2
现在我有多个端点(和多个服务), 如何在所有端点中插入查询参数? (不传入方法)。
OkHttp 似乎可以插入拦截器。

最佳答案

感谢@rahat 的链接
所以你可以通过OkHttpClient注入(inject)按照这个代码片段

import okhttp3.*
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

fun provideOkHttpClient(): OkHttpClient {
val httpClient = OkHttpClient.Builder()

httpClient.addInterceptor(object : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val original: Request = chain.request()
val originalHttpUrl: HttpUrl = original.url
// INTERESTING PART to inject query parameters
val url = originalHttpUrl.newBuilder()
.addQueryParameter("query_key1", "query_value1")
.addQueryParameter("query_key2", "query_value2")
.build()
// INTERESTING PART to inject query parameters

// Request customization: add request headers
val requestBuilder: Request.Builder = original.newBuilder()
.url(url)
val request: Request = requestBuilder.build()
return chain.proceed(request)
}
})

return httpClient.build()
}


然后你连接依赖注入(inject)改造和服务
// provide your OkHttpClient
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
}

fun provideTrackService(retrofit: Retrofit): YourService {
return retrofit.create(YourService::class.java)
}

关于kotlin - 改造为所有端点插入相同的查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65940930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com