GWT Autobean Codex 读取地图

Posted

技术标签:

【中文标题】GWT Autobean Codex 读取地图【英文标题】:GWT Autobean Codex reading a Map 【发布时间】:2012-08-22 15:30:42 【问题描述】:

我有一个 JSON 映射,例如:

 "element":"value","element2":"value2",...

同时具有键和值字符串。我尝试用 autobean 阅读它,但我得到了奇怪的例外。它应该是直截了当的,不是吗?

我得到的错误是:

[ERROR] [project_name] - The java.util.Map parameterization is not simple, but the getConf method does not provide a delegate

我是这样看地图的:

final String jsObject = GeneralContextNativeReader.read("globalConf");
GlobalConfFactory globalConfFactory = GWT.create(GlobalConfFactory.class);
Map<String, String> globalConf = AutoBeanCodex.decode(globalConfFactory, Map.class, jsObject).as();

工厂定义为:

public interface GlobalConfFactory extends AutoBeanFactory 
    AutoBean<Map<String, String>> globalConf();

这有什么问题?

【问题讨论】:

【参考方案1】:

AFAIK MapsLists 和其他非简单对象只能是引用类型,不能是值类型。有关详细信息,请参阅here。 将代码更改为此应该可以工作:

public interface Data 
   public Map<String,String>> getGlobalConf();


public interface DataFactory extends AutoBeanFactory 
   AutoBean<Data> getData();


final String jsObject = GeneralContextNativeReader.read("globalConf");
DataFactory dataFactory = GWT.create(DataFactory.class);
Data data = AutoBeanCodex.decode(dataFactory, Data.class, jsObject).as();
Map<String, String> globalConf = data.getGlobalConf();

您的 json 字符串必须看起来像这样:

"globalConf": "element":"value","element2":"value2",...

【讨论】:

【参考方案2】:

如果您的 AutoBean 接口包含静态方法(Java 8 中的新方法),也会发生这种情况。

【讨论】:

以上是关于GWT Autobean Codex 读取地图的主要内容,如果未能解决你的问题,请参考以下文章

如何序列化 AutoBean (GWT) 中的列表?

在 gwt 中支持 autobean 包装的原因是啥

GWT AutoBean:注释@PropertyName 不再起作用

没有设置方法的 GWT Autobean

GWT Autobean - 如何处理列表?

GWT Autobean Bean 为空