【问题标题】:Getting API Response header as POJO using retrofit in android在 android 中使用改造获取 API 响应标头作为 POJO
【发布时间】:2019-06-09 08:38:42
【问题描述】:

我正在使用 Retrofit 处理 API 请求。在我的应用程序中,我在标题和正文中获取数据作为响应。我们都知道“body”我们可以通过使用一些使用 Gson 或 Jackson 等的库将其转换为 POJO,以类似的方式,无论如何我们可以将标题作为 POJO 吗?或者建议在一个 POJO 类中同时制作 header 和 body 的最佳方法。

注意:在标题和正文中,我以 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")
        }
    })
}

【问题讨论】:

    标签: android http-headers retrofit retrofit2


    【解决方案1】:

    你可以得到这样的标题:

    Headers headers=response.headers();
    

    Headers.class 定义:

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

    此类逐行跟踪标题值。具有多个逗号分隔值的字段 * 同一行将被此类视为具有单个值的字段。这是调用者的 * 如果字段允许多个值,则负责检测和拆分逗号。这 * 简化了单值字段的使用,这些字段的值通常包含逗号,例如 cookie 或 * 日期。 * *

    这个类从值中修剪空白。它从不返回带有前导或尾随的值 * 空格。 * *

    这个类的实例是不可变的。 */

    从多个标题中获取值:

    headers.values("Set-Cookie")
    

    对于同名的标头:

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

    【讨论】:

    • 感谢您的回复。在我的代码中,我能够获取标题。我想将这些标头转换为 POJO。有什么解决办法吗?
    • 据我所知,你不能。
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2018-01-29
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多