我有一个Atlas应用程序,根据所使用的Atlas有一些特定的部分。我们基本上将其描述为:


一项地图活动以显示地点
一个地点详细信息活动以显示地点详细信息


我正在使用口味来构建与每个地图集相对应的应用程序。例如:


一餐厅风味
一处观光景点


每个地图集都从不同的服务器URL获取数据,尽管API相同,但是在处理位置详细信息时返回的JSON具有一些特定的部分:


餐馆具有JSON属性,例如open_time,food_type等,例如:

{ "name": "", lat: "", lon: "", "opening_time": "", "food_type": "" }
观光景点具有JSON属性,例如access_type,海拔高度...

{ "name": "", lat: "", lon: "", "access_type": "", "altitude": "" }


我正在使用Jackson进行JSON解析,并且达到了以下目的:


我完成了所有常见属性的解析,并将其显示在details活动中。
正确调用了各个服务器(在Gradle中将URL指定为BuildConfig常量)。


问题

我是刚建立新口味的人,我想知道哪种是处理特定口味代码的最佳方法(Jackson解析和详细视图)。我的意思是最干净的代码重复最少。

到目前为止,我做了什么:

对于视图,我觉得我可以简单地合并一个布局XML,每个变体都将覆盖它。这似乎可以解决问题。

对于Java代码,我还是很迷茫。也许像

class Place {
  @JsonProperty("name")
  String name;

  @JsonUnwrapped
  Details details;
}


但是,如何在不复制通用地方代码和解析注释的情况下获得特定于风味的Details实现?即:


餐厅风味使用com.atlas.restaurant.Details
观光风味用途com.atlas.sightseeing.Details


PS:我无法更改有关API和服务器代码的任何内容。

最佳答案

没有答案,所以这是我的做法:

1.在主源集中将com.example.model.Place类创建为

class Place {
  @JsonProperty("name")
  String name;

  @JsonUnwrapped
  Details details;
}


2.为com.example.model.Details风味源集创建一个restaurant

class Details {
      @JsonProperty("opening_time")
      String openingTime;
}


3.为com.example.model.Details风味源集创建一个sightseeing

class Details {
      @JsonProperty("access_type")
      String accessType;
}


4.工作流程

打开“构建变体”面板,然后选择要处理的样式。然后,将选择适当的源集。完成某种口味后,您可以切换到另一种口味,如果缺少某个类,则会收到指示该类的警告和错误。

10-07 19:35
查看更多