Retrofit удаляет параметры запроса из базового URL - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть параметры запроса, которые используются для всех запросов.Он добавляется к базовому URL следующим образом:

private val baseUrl = HttpUrl.Builder()
            .scheme("http")
            .host("ws.audioscrobbler.com")
            .addPathSegment("2.0")
            .addPathSegment("")
            .addQueryParameter("format", "json")
            .addQueryParameter("api_key", "val")
            .build()

retrofit = Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(okHttpClient)
                .build()

Вызов службы API:

 @GET("./")
    fun searchTracks(@Query("otherParam") query: String): Call<Any>

URL создается правильно до фактического вызова.Он удаляет параметры запроса, добавленные в базовый URL, и сохраняет только один добавленный в вызове службы.Отображается при отладке до вызова delegate.enqueue() в ExecutorCallAdapterFactory: "http://ws.audioscrobbler.com/2.0/?format=json&api_key=val&otherParam=val"показано в логах (через перехватчик): "http://ws.audioscrobbler.com/2.0/?otherParam=val"

Есть идеи, почему это происходит и как сохранить параметры?

1 Ответ

0 голосов
/ 24 ноября 2018

Вы должны добавить параметры запроса к URL в перехватчике запроса.

        OkHttpClient.Builder httpClient =  
    new OkHttpClient.Builder();
httpClient.addInterceptor(new Interceptor() {  
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request original = chain.request();
        HttpUrl originalHttpUrl = original.url();

        HttpUrl url = originalHttpUrl.newBuilder()
                .addQueryParameter("format", "json")
                .addQueryParameter("api_key", "val")
                .build();

        // Request customization: add request headers
        Request.Builder requestBuilder = original.newBuilder()
                .url(url);

        Request request = requestBuilder.build();
        return chain.proceed(request);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...