6

我的服务器以 JSON 格式返回对象列表。例如,它们可能是Cats 或Dogs。

当我知道它们都将是Cats 时,我可以AutoBeanCodex轻松地将其设置为工作。但是,当我不知道它们是什么类型时……我该怎么办?

我可以给我的所有实体一个类型字段,但是我必须先解析每个实体,然后再将其传递给AutoBeanCodex,这几乎是失败的点。我还有什么其他选择?

4

1 回答 1

8

前几天刚开始玩这个,打了几个小时,尝试了一些@Category方法和其他方法,直到我发现:你可以创建一个 type 的属性Splittable,它代表底层传输类型,它对布尔值/字符串有一些编码/列表/地图。就我而言,我知道一些在设计时通过线路传输的包络类型,并且基于其他一些属性,其他一些字段可以是任意数量的其他 autobeans。

您甚至不需要在编译时知道其他 bean 的类型,您可以使用Splittable's 方法获取值,但如果仍然使用 autobeans,最好定义包装的数据。

interface Envelope {
  String getStatus();
  String getDataType();
  Splittable getData();
}

(如果您发送数据和接收数据,则可能需要设置器 - 将 bean 编码为 `Splittable 以将其发送到信封中比解码它更容易)

通过网络发送的 JSON 被解码(可能使用AutoBeanCodex)到Envelope类型中,并且在您决定必须从方法中输出的类型之后getData(),调用类似这样的方法来获取嵌套对象

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
                                               SpecificNestedBean.class, 
                                               env.getData()).as();

Envelope类型和嵌套类型(在factory上面)甚至不需要是相同的类型AutoBeanFactory。这可以让您从通用传输实例中抽象出信封的读/写,并为每个dataType字符串属性使用特定的工厂来解码数据的模型(和嵌套模型)。

于 2012-02-10T21:40:05.297 回答