GWT - RPC 序列化异常和 MapDB

GWT - RPC serialization exception and MapDB

我正在使用 gwt 并且正在使用 mapdb,当我将数据检索为地图 (BTreeMap) 时,gwt 抛出 rpc 序列化异常。我将地图包装在一个实现 SerializableIsSerializable 的对象中,但这不起作用。

我不知道为什么这不起作用,因为我阅读了 mapdb 的文档并且我正确地使用了它。

这是代码:

public class WrapperObject implements Serializable, IsSerializable {

          private Map<String, List<String>> map;

          public WrapperObject() {}
          public WrapperObject(Map<String, List<String>> map) {
              this.map = map;
          }
          //GETTERS AND SETTERS
          ...
}


public class Prova {
    ....

    private DB openDB() {
        return DBMaker.shoutdownOnJvmClose().make();
    }

    ...

    public WrapperObject retrieveData() {
        DB db = this.openDB();

        Map<String, List<String>> map = 
        db.getTreeMap("values");

        return new WrapperObject(map);
    }
}

然后在客户端中 class 我使用地图创建了一个带有 treeItem 的树。

感谢您的帮助。

问题是,Map 不是 Serializable

即您的 WrapperObject 被标记为 SerializableIsSerializable, 但并非其所有成员都以这种方式标记(参见 Map 和包装的 List)。

要解决此问题,您可以将 map 的类型更改为可序列化的 Map 的实现(例如 LinkedHashMapArrayList):

private LinkedHashMap<String, ArrayList<String>> map;