我的服务器返回JSON中的对象列表。例如,它们可能是Cat或Dog。
Cat
Dog
当我知道它们都将是Cats时,我可以将其设置AutoBeanCodex为轻松工作。但是,当我不知道它们是什么类型时,该怎么办?
AutoBeanCodex
我可以给所有实体一个类型字段,但是随后我必须先解析每个实体,然后再将其传递给AutoBeanCodex,该实体与击败该点接壤。我还有什么其他选择?
前几天刚开始玩这个游戏,并花了几个小时尝试@Category方法和其他方法,直到发现:您可以创建type属性Splittable,该属性表示基础传输类型,该类型具有对booleans / Strings的某种编码/列表/地图。以我为例,我知道在设计时会通过某种包络类型,并且基于其他属性,其他字段可以是任意数量的其他autobean。
@Category
Splittable
您甚至不需要在编译时就知道另一个bean的类型,可以使用Splittable的方法获取值,但是无论如何如果使用autobeans,定义包装的数据是很好的。
interface Envelope { String getStatus(); String getDataType(); Splittable getData(); }
(如果您既要发送数据又要接收数据,则可能需要设置者-将bean编码为`Splittable以将其发送到信封中比将其解码更容易)
通过网络发送的JSON被解码(可能使用AutoBeanCodex)成该Envelope类型,并且在您确定必须从该getData()方法中确定哪种类型后,调用类似这样的方法来获取嵌套对象
Envelope
getData()
SpecificNestedBean bean = AutoBeanCodex.decode(factory, SpecificNestedBean.class, env.getData()).as();
的Envelope类型和嵌套类型(在factory上文)甚至不需要是相同的AutoBeanFactory类型。这可以让您从通用传输实例中抽象出对信封的读取/写入,并对每个dataType字符串属性使用特定的工厂来解码数据的模型(和嵌套模型)。
factory
AutoBeanFactory
dataType