【问题标题】:Android Retrofit and bad data contractAndroid Retrofit 和错误的数据合约
【发布时间】:2015-06-05 03:46:54
【问题描述】:

通常 RESTful 端点返回一个对象或所述类型对象的列表以及用于分页目的的一些附加数据。

然而,有趣的是,我正在使用的 API 将返回一个混合类型对象的列表。例如:

{
  "media": [
    {
      "id": 1,
      "type": "oranges",
      "Some type specific property": "foo"
    },
    {
      "id": 1,
      "type": "apples",
      "Some type specific property": "bar"
    }
   ]
}

改造是否可以通过反射来适应这种情况并正确挑选出使用相同键返回的不同类型的对象? (如我们的示例media

移动应用程序已经在生产模式下运行,那么适应这种 API 架构最不痛苦的方式是什么?

【问题讨论】:

  • 是的,这会起作用,为此 json 创建 java 对象并使用 rettofit 调用 api
  • 如何改造才能在媒体数组中挑选出要创建的对象类型?因为有两种不同类型的对象被返回。
  • 你必须将 json 映射到 java 对象,我已经发布了答案。 Retrofit 内部使用 GSON 将 json 反序列化为 java 对象
  • 我可能不清楚,但媒体数组中的对象映射到不同的类。 Retrofit 如何知道要使用哪个类?

标签: android retrofit


【解决方案1】:

使用http://www.jsonschema2pojo.org/创建java对象模型

使用改造定义你的 api

public interface sampleApi {
@GET("/v1/endpoint")
void promoImages(Callback<CustomObject> callback);

创建适配器

 RestAdapter.Builder builder = new RestAdapter.Builder()
                .setEndpoint(BuildConfig.BASE_SERVER_ENDPOINT)
                .setClient(new OkClient(client));

 CustomApi api = builder.build().create(CustomApi.class);

调用api

  api.promoImages(callback);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多