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

时间:2012-02-10 20:47:14

标签: json gwt autobean

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

当我知道他们都是Cat时,我可以轻松设置AutoBeanCodex。当我不知道它们是什么类型时,虽然......我该怎么办?

我可以为我的所有实体提供一个类型字段,但是我必须在将每个实体传递给AutoBeanCodex之前对其进行解析,而{{1}}与实现失败有关。我还有其他选择吗?

1 个答案:

答案 0 :(得分:8)

前几天刚开始玩这个游戏,并且花了几个小时,尝试了@Category方法和其他方法,直到找到了这个:你可以创建一个Splittable类型的属性,表示对booleans / Strings / Lists / Maps进行一些编码的基础传输类型。在我的情况下,我知道一些在设计时通过电线的包络类型,并且基于其他一些属性,其他一些字段可以是任意数量的其他自动传输。

您甚至不需要在编译时知道其他bean的类型,您可以使用Splittable的方法获取值,但如果使用自动转移,最好定义数据包裹着。

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

(如果您发送数据以及接收,可能需要Setter - 将bean编码为`Splittable以便在信封中发送它比解码它更容易)

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

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

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