Как получить пользовательский заголовок из ответа (retrofit & rxjava) - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь получить некоторые пользовательские HTTP-заголовки из всех ответов REST API в моем коде. Вот как я запускаю клиента:

private fun initializeClient(): OkHttpClient {
        val interceptor = HttpLoggingInterceptor()
        interceptor.level = HttpLoggingInterceptor.Level.BODY
        val httpClient = OkHttpClient.Builder()
                .addInterceptor(object : Interceptor {
                    override fun intercept(chain: Interceptor.Chain): Response {
                        val original = chain.request()

                        val request = original.newBuilder()
                                .header("Content-Type", "application/json")
                                .method(original.method, original.body)
                                .build()

                        return chain.proceed(request)
                    }

                })
                .addInterceptor(interceptor)
                .build()
        return httpClient
    }

private fun initializeApi() {
        api = Retrofit.Builder()
                .baseUrl(API_BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(initializeClient())
                .build()
                .create(RestApi::class.java)
    }

Вот пример реализации модернизации:

@POST("/register")
    fun registerUser(@Body registerPostData: RegistrationForm): Single<RegistrationResponse>

и часть ViewModel:

disposable.add(
                api.registerUser(form)
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribeWith(object : DisposableSingleObserver<Member>() {
                            override fun onSuccess(value: RegistrationResponse?) {
// no headers in here
                                response.value = value
                            }

                            override fun onError(e: Throwable?) {

                            }

                        })
        )

сервер возвращает x-custom-header во всех ответах API, которые мне нужно захватить во всех вызовах.

Спасибо!

1 Ответ

0 голосов
/ 24 октября 2019

Измените свой класс дооснащения так, чтобы он возвращал Ответ :

@POST("/register")
fun registerUser(@Body registerPostData: RegistrationForm): Single<Response<RegistrationResponse>>

, затем:

override fun onSuccess(result: Response<RegistrationResponse>?) {
    // get header from response.headers()
}
...