【问题标题】:GWT - SerializationException when I send Map<Object, Object>GWT - 当我发送 Map<Object, Object> 时出现 SerializationException
【发布时间】:2014-07-15 15:36:40
【问题描述】:

我有一些 HashMap:

Map<SearchConfig, Object> searchParams;

Object可以是简单的类型,比如String,也可以是简单的实体:

public class SearchDataEntity implements Serializable  {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public SearchDataEntity() {}

    private String startDate;

    private String endDate;

    public String getStartDate() {
        return startDate;
    }

    public void setStartDate(String startDate) {
        this.startDate = startDate;
    }

    public String getEndDate() {
        return endDate;
    }

    public void setEndDate(String endDate) {
        this.endDate = endDate;
    }
}

当我将它发送到服务器时,我遇到了 SerializationException。

如果我将 SearchDataEntity 与 Map 分开发送就可以了。

【问题讨论】:

  • SearchConfigSerializable 也一样吗?
  • 可以SearchConfig没问题
  • 也许您在地图中存储了一个非 Serializable 对象。
  • 如果可能,请分享一个完整的最小可测试代码。

标签: java gwt rpc gwt-rpc


【解决方案1】:

你告诉 GWT 编译器一个 Map 将包含一个 Object。然后你尝试传递一个字符串或一个 SearchDataEntity 而不是一个对象。编译器没有预料到这一点,并且它没有在此序列化策略中包含处理 String 或 SearchDataEntity 的方法。

这样想:如果您为 Map 指定“Animal”而不是“Dog”,当您传递 Dog 对象时,编译器将不知道如何处理方法 isBarking()

您需要在 RPC 调用中使用特定的 HashMap&lt;SearchConfig, SearchDataEntity&gt;HashMap&lt;SearchConfig, String&gt;

另外,最佳实践是使用HashMap 而不是Map 进行RPC 调用。同样,编译器尝试包含尽可能少的代码。通过指定Map,您会强制编译器执行不必要的工作(它必须查找使用此 Map 的每种情况,以查看可能需要哪些实现),这可能会导致代码超出所需。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2010-10-26
    相关资源
    最近更新 更多