Модифицированный заголовок перехватчик не меняет заголовок - PullRequest
0 голосов
/ 01 марта 2019

У меня есть приложение для Android с несколькими вызовами API.Я заметил, что в каждом вызове есть аннотация @Headers("Content-Type: application/json") в ApiService, поэтому я решил удалить аннотацию и добавить заголовок через перехватчик для всех запросов:

    val headers = { chain: Interceptor.Chain ->
        val request = chain.request().newBuilder()
                .addHeader("Content-Type", "application/json")
                .build()
        chain.proceed(request)
    }

    val logging = HttpLoggingInterceptor()
    logging.level = HttpLoggingInterceptor.Level.BODY

    val client = OkHttpClient.Builder()
            .addInterceptor(headers)
            .addInterceptor(logging)
            .build()

    val customGson = GsonBuilder()
            .registerTypeAdapter(NameValuesList::class.java, NamesValuesListConverter())
            .create()

    val retrofit = Retrofit.Builder()
            .baseUrl("http://www.$fullDomain")
            .addConverterFactory(GsonConverterFactory.create(customGson))
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(client)
            .build()

    service = retrofit.create(ApiService::class.java)

Но после этого сервер возвращает ошибку при вызове API.В журналах я вижу, что когда у меня есть явная аннотация @Headers():

D/OkHttp: Content-Type: application/json

И после замены ее перехватчиком:

D/OkHttp: Content-Type: application/json; charset=UTF-8

Я пытался изменить перехватчик на этот:

    val headers = { chain: Interceptor.Chain ->
        val request = chain.request().newBuilder()
                .headers(Headers.of(mutableMapOf("Content-Type" to "test")))
                .build()
        chain.proceed(request)
    }

Но я все еще вижу это в журнале:

D/OkHttp: Content-Type: application/json; charset=UTF-8

Похоже, мой перехватчик не применяется и не переопределяется.Как это исправить?

UPD .Я нашел причину: когда я добавляю GsonConverterFactory, он автоматически добавляет заголовок Content-Type: application/json; charset=UTF-8.Есть ли способ избежать этого без реализации собственного ConverterFactory?

1 Ответ

0 голосов
/ 01 марта 2019

как сказано в документации: «Примечание. Заголовки не перезаписывают друг друга. Все заголовки с одинаковыми именами будут включены в запрос».

относится к заголовкам дооснащения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...