【问题标题】:Select the root element(aka key or envelope)选择根元素(又名键或信封)
【发布时间】:2017-05-03 10:37:48
【问题描述】:

我的理解是 Retrofit 和它的 Gson 解析器期望格式为:

[
    {},
    {}
]

但是,如果我的 API 将所有内容包装到一个属性中,例如:

{ 
    'data':[
        {},
        {}
    ]
}

如何让 Retrofit 从“数据”中开始解析内部对象?

【问题讨论】:

    标签: android json api retrofit


    【解决方案1】:

    您可以让 Retrofit 接口方法返回您定义的自定义类型,该类型本身包含一个名为 data 的列表。

    public class MyResponse {
        private final List<Thing> data;
    }
    
    public interface MyApi {
        @GET("/data")
        Call<MyResponse> getThings();
    }
    

    这是最简单的解决方案。您可以改为在使用您的 Gson 实例注册的 TypeAdapter 中实现自定义反序列化逻辑,该实例忽略对象包装器,但它会更复杂,如果 API 曾经在该包装器中返回有用的东西,您将需要进行一些重构。

    【讨论】:

    • 谢谢,我也得出了同样的结论。来自网络,当我想要的只是“body.data”时,所有这些选项似乎都过于复杂。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多