无法在反序列化的AutoBean Map中插入新条目

时间:2012-06-01 19:06:53

标签: gwt autobean

当我尝试向反序列化的Map实例插入新条目时,我没有例外但是Map没有被修改。此EntryPoint代码对其进行探测。我做错了什么?

public class Test2 implements EntryPoint {

public interface SomeProxy {
    Map<String, List<Integer>> getStringKeyMap();
    void setStringKeyMap(Map<String, List<Integer>> value);
}

public interface BeanFactory extends AutoBeanFactory {
    BeanFactory INSTANCE = GWT.create(BeanFactory.class);

    AutoBean<SomeProxy> someProxy();
}

@Override
public void onModuleLoad() {
    SomeProxy proxy = BeanFactory.INSTANCE.someProxy().as();

    proxy.setStringKeyMap(new HashMap<String, List<Integer>>());
    proxy.getStringKeyMap().put("k1", new ArrayList<Integer>());
    proxy.getStringKeyMap().put("k2", new ArrayList<Integer>());

    String payload = AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(proxy)).toString();
    proxy = AutoBeanCodex.decode(BeanFactory.INSTANCE, SomeProxy.class, payload).as();

    // insert a new entry into a deserialized map
    proxy.getStringKeyMap().put("k3", new ArrayList<Integer>());

    System.out.println(proxy.getStringKeyMap().keySet()); // the keySet is [k1, k2] :-( ¿where is k3? 
}

}

2 个答案:

答案 0 :(得分:0)

AutoBeanCodex.encode(AutoBeanUtils.getAutoBean(proxy)) .toString(); 不应该是 getPayLoad()

我稍后会检查代码,但我不知道是否会导致问题。但它确实与我的典型方法不同。

答案 1 :(得分:0)

诸如java.util.Set和java.util.List之类的集合类很棘手,因为它们根据Object实例进行操作。要使集合可序列化,您应该通过普通类型参数指定它们应包含的特定对象类型(例如,Map<Foo,Bar>而不仅仅是Map)。如果您使用原始集合或地图,您将获得臃肿的代码,并且容易受到拒绝服务攻击。

字体:http://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes