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

Ril*_*ark 6 gwt json autobean

我的服务器返回JSON中的对象列表.例如,他们可能是Cats或Dogs.

当我知道他们都是Cats时,我可以AutoBeanCodex轻松地开始工作.当我不知道它们是什么类型时,虽然......我该怎么办?

我可以给我的所有实体一个类型字段,但是然后我必须在将每个实体传递给它之前解析每个实体AutoBeanCodex,这与实现失败有关.我还有其他选择吗?

Col*_*rth 8

前几天刚刚玩了这个,并且花了几个小时,尝试了@Category方法和其他方法,直到我发现:你可以创建一个类型的属性Splittable,它表示对booleans/Strings有一些编码的底层传输类型/列表/地图.在我的情况下,我知道一些在设计时通过电线的包络类型,并且基于其他一些属性,一些其他字段可以是任何数量的其他自动传输.

你甚至不需要在编译时知道另一个bean的类型,你可以使用Splittable方法获取值,但是如果使用autobeans,最好定义被包装的数据.

interface Envelope {
  String getStatus();
  String getDataType();
  Splittable getData();
}
Run Code Online (Sandbox Code Playgroud)

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

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

SpecificNestedBean bean = AutoBeanCodex.decode(factory, 
                                               SpecificNestedBean.class, 
                                               env.getData()).as();
Run Code Online (Sandbox Code Playgroud)

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