У меня есть приложение для 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?