我一直在使用AutoBeans来映射来自非GWT-RPC基于Java的Web服务的JSON数据。除了一个映射以外,所有东西都一直在运行。有没有办法让GWT AutoBean下滑?
在服务器端,类有一个Map类型的属性,其中MyAbstractParentObject是大约15个不同子类的父类。
当我将其映射到客户端上的相应AutoBean接口时,我无法在解码后将MyAbstractParentObject向下转换为其子类型。我查看了GWT文档和'Googles',看看AutoBeans是否具有多态支持,但无论如何都无法得到答案。拦截器和类别似乎不能处理这个问题,只是他们想要在接口中存在的方法不是getter/setters。
我正在尝试使用JSON数据中的type字段来创建一个解决方案,以创建子类的一个实例,但AutoBean不允许我访问原始JSON,即使在调试器中我可以看到它一个名为“数据”的受保护字段。如果我尝试解码原始的bean,它将只有MyAbstractParentObject中的字段。
我能看到的唯一的选择是:
- 扩展或创建自己的AutoBeanCodex能够妥善处理MyAbstractParentObject的 孩子时,解码JSON。
- 找到一种方法在MyAbstractParentObject AutoBean 中找到原始JSON,并使用该方法即时创建子实例和实例。
- 切换到其他一些JSON-GWT序列化框架,如 GWTProJSONSerializer或piriti。
任何帮助,将不胜感激。
我不得不使用AutoBeans做类似的事情,但我做了一个完整的编码,以便从AutoBean中获得可拆分表格 Splittable split = AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(sourceBean)); – Jonathan
@Jonathan我尝试过'AutoBeanCodex.encode()';它适用于上传,但不适用于向下转换 - 这是一个很简单的方法。 :) '编码()'使用访问者模式遍历bean的属性来产生新的'Splittable'。可悲的是,源JSON具有无法通过该bean访问的属性,但需要将其“downcast”它......并且访问者不会看到它们,所以来自encode()的JSON的Splittable '没有他们。 :( ......因此古怪直接获得'Splittable'并复制它。它正确地解码,因为所有的信息仍然存在 –
我看你要什么现在看来,我认为这两种技术都有自己的。我一直在使用我上面提到的方法,因为大多数时候我将一个自动选择器转换为另一个,所以在这种情况下我做了修改,所以在这种情况下,我需要完整的访问者遍历得到所有正确的物化信息如果你没有做任何修改,并且你知道**没有做任何修改,那么使用'HasSplittable'可以使滑动的斜率变好,否则,你只能选择执行完整的编码。除非我失去了一些东西..... – Jonathan