如何使用GWT Autobeans处理动态JSON数据?

时间:2012-03-02 20:29:14

标签: java gwt gxt autobean

目前我有一个类设置要作为autobean处理:

public interface Asset extends Hit {
    String getGuid();
    String getHitType();
    Map<String,Serializable> getMetadata();
}

我尝试使用Object而不是Serializable:

Map<String,Object>  getMetadata()

但是在尝试访问数据时似乎会爆炸(因为它不是'具体')。

元数据地图可能包含其他地图,字符串,整数等。如何从该元数据对象的内部地图中检索数据?

目前,如果我调用asset.getMetadata()。get(“title”);这将返回一个SerializableAutoBean,并在该对象上执行toString()或String.valueOf(obj),返回内存对象信息,而不是实际的字符串值。

AutoBean对象可以是动态的,还是特别需要定义每个字段?

1 个答案:

答案 0 :(得分:0)

AutoBeans在Java泛型或RTTI意义上不是“动态的”。

在GWT中,必须在编译时知道所有类型的自动生成的任何类型(包括AutoBeans)。这会限制您的设计,使您无法充分利用Java的语言功能(特别是泛型和其他RTTI功能)。因此,AutoBeans在RTTI或Java通用意义上不是动态的。但是,AutoBeans只是一种包装数据的低级方式,您仍然可以使用Splittables访问数据!

如前面的注释中所述,您可以将Splittables用于JSON对象的部分,这些部分的类型在序列化/解码时是未知的。当然,让所有事情一下子发生会很好,但是没有什么能阻止你对数据对象进行一些后处理以使它们进入你想要的状态。

对于某人“Grok”AutoBeans(以及其他任何自动生成的)正在发生的事情,一个非常好的方法是查看生成的代码。 maven的默认位置是:${project.build.directory}/.generated

如果您在编译之后查看,那么您应该找到GWT编译器为您的AutoBeans生成的代码。