繁体   English   中英

改装拦截器未向URL添加查询参数

[英]Retrofit Interceptor not adding query param to URL

我正在尝试使用自定义interceptor在URL中添加apikey,但是它没有在URL中添加参数,因此响应主体为null。

自定义拦截器

class CustomInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {

        val url = chain.request().url().newBuilder()
            .addQueryParameter("apiKey", API_KEY)
            .build()

        val request = chain.request().newBuilder()
            .url(url)
            .build()

        return chain.proceed(request)
    }
}

客户

class Client {

    companion object {

        const val API_KEY = "123123"
        private const val apiUrl = "https://www.omdbapi.com/"

        fun <T> create(service: Class<T>): T {
            val client = OkHttpClient.Builder()
                .addInterceptor(CustomInterceptor())
                .build()

            return Retrofit.Builder()
                .baseUrl(apiUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build()
                .create(service)
        }
    }
}

电影

interface IMovie {

    @GET("/")
    fun searchMovie(@Query("s") query: String): Call<SearchResult>
}

发送请求后,响应正文为null,这是

实际网址:-https: //www.omdbapi.com/?s=Man

预期的网址:-https: //www.omdbapi.com/?s=Man&apikey=123123

首先从现有请求中创建一个新的httpUrl实例,并添加您的查询参数和值:

var request = chain.request()

val httpUrl = request.url().newBuilder().addQueryParameter("token", authToken).build()

然后更新请求:

request = request.newBuilder().url(httpUrl).build()

并继续:

return chain.proceed(request)

  • 当您从链中调用该请求时(在操纵后继续执行该请求),您将再次收到未修改的请求。

问题未解决?试试以下方法:

改装拦截器未向URL添加查询参数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM