GWT - 当我发送Map <object,object =“”> </object,>时出现SerializationException

时间:2014-07-15 15:36:40

标签: 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;
    }
}

当我将其发送到服务器时,我有Seri​​alizationException。

如果我将SearchDataEntity与Map分开发送,那就OK了。

1 个答案:

答案 0 :(得分:4)

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

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

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

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