GWT - 当我发送 Map<Object, Object> 时出现 SerializationException

Posted

技术标签:

【中文标题】GWT - 当我发送 Map<Object, Object> 时出现 SerializationException【英文标题】:GWT - SerializationException when I send Map<Object, Object> 【发布时间】: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 对象。 如果可能,请分享一个完整的最小可测试代码。 【参考方案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 的每种情况,以查看可能需要哪些实现),这可能会导致代码超出所需。

【讨论】:

以上是关于GWT - 当我发送 Map<Object, Object> 时出现 SerializationException的主要内容,如果未能解决你的问题,请参考以下文章

GWT MAP 中的活动指示器

GWT Autobeans,将根级别解析为 Map 或 List

在 GWT-RPC 中将 ArrayList 作为参数发送

gwt序列化

有没有办法降低 GWT AutoBean?

将 DATA 映射到 jqGrid