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

标签 java gwt rpc gwt-rpc

我有一些 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 分开发送就可以了。

最佳答案

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

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

您需要使用特定的HashMap<SearchConfig, SearchDataEntity>HashMap<SearchConfig, String>在您的 RPC 调用中。

另外,最佳实践是使用 HashMap而不是Map用于 RPC 调用。同样,编译器尝试包含尽可能少的代码。通过指定Map你强制编译器做比必要的更多的工作(它必须寻找使用此映射的每种情况,以了解可能需要什么实现),并且可能会导致代码比必要的更大。

关于java - GWT - 当我发送 Map<Object, Object> 时出现 SerializationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24762397/

相关文章:

java - 为什么会出现这个 NumberFormatException?

java - 我们如何为 android 中的 EditText 定义最小和最大自定义值之间的范围,例如 85 和 110

design-patterns - 根据用户权限隐藏/禁用 GUI 元素的最佳方法?

architecture - 在微服务中,我应该使用 pub/sub 而不是 RPC 来获得更松散耦合的架构吗?

java - 我可以(轻松地)使用第三方库来处理 Java RMI 的序列化吗?

java - 如何将监听器放入 web.xml java 中?

Java 通用 lambda 记忆化

GWT 可调整大小的面板

java - ClientBundle.enableInlined 和 ClientBundle.enableRenaming?

java - 创建 Android 在线编译器需要什么?