Получение заголовка ответа API в виде POJO с использованием модификации в Android - PullRequest
0 голосов
/ 09 июня 2019

Я использую Retrofit для запросов API. В моем приложении я получаю данные как ответ в заголовке и теле. Поскольку мы все знаем «тело», мы можем преобразовать как POJO, используя некоторые библиотеки, используя Gson или Jackson и т. Д., Аналогичным образом, есть ли в любом случае, мы можем получить заголовки как POJO? Или предложите лучший подход для создания заголовка и тела в одном классе POJO.

ПРИМЕЧАНИЕ: В заголовке и теле я получаю данные в формате Json

Ниже приведен код, который я использую для отправки запроса.

override fun login(request: LoginModel.Request) {

    val call: Call<LoginModel.Response> = apiService.login(request)

    call.enqueue(object : Callback<LoginModel.Response> {
        override fun onResponse(call: Call<LoginModel.Response>, response: Response<LoginModel.Response>) {
            // Log.d(TAG, "login success")
            if (response != null) {
                val status = response.code()
                var headers =   response.headers();
                var names =  headers.names();

                for (name:String in names ) {
                    Log.d("Testing","name:"+name+" value:"+headers.get(name))
                }

                if (response.body() != null) {
                    var loginResponse: LoginModel.Response = response.body() as LoginModel.Response;

                        if (status == 200) {
                            responseCallback?.onSuccess(loginResponse)
                        } else {
                            responseCallback?.onFailure(loginResponse)
                        }

                }
            }
        }

        override fun onFailure(call: Call<LoginModel.Response>, t: Throwable) {
            responseCallback?.onFailure("Something went wrong while login")
        }
    })
}

1 Ответ

0 голосов
/ 09 июня 2019

вы можете получить заголовок следующим образом:

Headers headers=response.headers();

Определение Headers.class:

/ ** * Поля заголовка одного сообщения HTTP.Значения представляют собой неинтерпретированные строки;* *

Этот класс отслеживает значения заголовка построчно.Поле с несколькими значениями, разделенными запятыми * в одной строке, будет рассматриваться как поле с одним значением этим классом.Вызывающий абонент * обязан обнаруживать и разделять запятые, если их поле допускает несколько значений.Это * упрощает использование однозначных полей, значения которых обычно содержат запятые, такие как куки или * даты.* *

Этот класс удаляет пробелы из значений.Он никогда не возвращает значения с пробелом в начале или в конце *.* *

Экземпляры этого класса являются неизменяемыми.* /

Чтобы получить значения из нескольких заголовков:

headers.values("Set-Cookie")

Для того же имени заголовков:

List<String> cookieList = headers.toMultimap().get("set-cookie")
...