使用Android中的改造将API Response标头获取为POJO

时间:2019-06-09 08:38:42

标签: android http-headers retrofit retrofit2

我正在对API请求使用Retrofit。在我的应用程序中,我在标头和正文中获取数据作为响应。众所周知,“身体”可以通过使用某些使用Gson或Jackson的库转换为POJO,以类似的方式可以将标头转换为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 :(得分:0)

您可以像这样获得标题:

Headers headers=response.headers();

Headers.class的定义:

/ **  *单个HTTP消息的标头字段。值是未解释的字符串;  *  *

该类逐行跟踪标头值。字段上有多个逗号分隔的值  *此类会将同一行视为具有单个值的字段。是来电者的  *如果逗号允许多个值,则负责检测并分割逗号。这个  *简化了单值字段的使用,该字段的值通常包含逗号,例如Cookie或  * 日期。  *  *

此类从值中修剪空白。它永远不会返回前导或尾随的值  *空格。  *  *

此类的实例是不可变的。  * /

要从多个标题中获取值,请执行以下操作:

headers.values("Set-Cookie")

对于标题相同的名称:

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