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 分开发送就可以了。
【问题讨论】:
SearchConfig
类 Serializable
也一样吗?
可以SearchConfig
没问题
也许您在地图中存储了一个非 Serializable
对象。
如果可能,请分享一个完整的最小可测试代码。
【参考方案1】:
你告诉 GWT 编译器一个 Map 将包含一个 Object。然后你尝试传递一个字符串或一个 SearchDataEntity 而不是一个对象。编译器没有预料到这一点,并且它没有在此序列化策略中包含处理 String 或 SearchDataEntity 的方法。
这样想:如果您为 Map 指定“Animal”而不是“Dog”,当您传递 Dog 对象时,编译器将不知道如何处理方法 isBarking()
。
您需要在 RPC 调用中使用特定的 HashMap<SearchConfig, SearchDataEntity>
或 HashMap<SearchConfig, String>
。
另外,最佳实践是使用HashMap
而不是Map
进行RPC 调用。同样,编译器尝试包含尽可能少的代码。通过指定Map
,您会强制编译器执行不必要的工作(它必须查找使用此 Map 的每种情况,以查看可能需要哪些实现),这可能会导致代码超出所需。
【讨论】:
以上是关于GWT - 当我发送 Map<Object, Object> 时出现 SerializationException的主要内容,如果未能解决你的问题,请参考以下文章