一尘不染

在GWT上使用AutoBean解析未知类型的JSON对象

json

我的服务器返回JSON中的对象列表。例如,它们可能是CatDog

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

我可以给所有实体一个类型字段,但是随后我必须先解析每个实体,然后再将其传递给AutoBeanCodex,该实体与击败该点接壤。我还有什么其他选择?


阅读 210

收藏
2020-07-27

共1个答案

一尘不染

前几天刚开始玩这个游戏,并花了几个小时尝试@Category方法和其他方法,直到发现:您可以创建type属性Splittable,该属性表示基础传输类型,该类型具有对booleans
/ Strings的某种编码/列表/地图。以我为例,我知道在设计时会通过某种包络类型,并且基于其他属性,其他字段可以是任意数量的其他autobean。

您甚至不需要在编译时就知道另一个bean的类型,可以使用Splittable的方法获取值,但是无论如何如果使用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字符串属性使用特定的工厂来解码数据的模型(和嵌套模型)。

2020-07-27