使用带有 GWT RPC 2.5.1-rc1 的 Guava 14.0,使用 maven 构建,如Guava 库和 GWT中所述
Guava 集合的反序列化似乎运行良好。但是,在尝试反序列化包含 Optional.Present 的响应 DTO 时,我遇到了 SerializationException。
Caused by: com.google.gwt.user.client.rpc.SerializationException: com.google.common.base.Present/3434853995
at com.google.gwt.user.client.rpc.impl.SerializerBase.getTypeHandler(SerializerBase.java:153)
查看 SerializerBase.java:146 methodToJava 映射不包含:
com.google.common.base.Present/3434853995
但是,它确实包含一个 CustomFieldSerializer 用于:
com.google.common.base.Present/3491224270
那么,/3434853995 映射是怎么回事?
看起来这是 SerializerBase 用来确保服务器端类型与客户端类型相同的哈希(在编译时计算)。查看 guava-gwt 和服务器端 guava Optional.Present,这些不匹配。而且由于 Present 是在服务器端实例化的,它的哈希值与客户端 Present 不匹配?