我正在尝试通过GWT RPC(GWT 2.4)发送一个对象。该对象包括一个对象,该对象包括以下字段:
@Serialized
private Map<Class<? extends Foo>, Foo> fooMap = ImmutableMap.of();
Foo
定义为:
public interface Foo extends Serializable {
}
当fooMap
为空时,它可以正常工作。填充后,GWT RPC失败并显示SerializationException
。 (服务器永远不会被命中。)Foo
中唯一的fooMap
类型来自此类:
public class FooImpl implements Foo {
private static final long serialVersionUID = 1L;
private long bar;
private float baz;
private int batz;
...
}
我做错了什么? FooImpl
不应该导致任何问题。每个类都有一个无参数的构造函数。对于每个序列化对象的每个私有字段,我都不需要getter和setter,对吧? Class<? extends Foo>
有问题吗?
答案 0 :(得分:2)
Class<? extends Foo>
很可能是个问题。据我所知,GWT根本不知道如何序列化 - 反序列化Class
实例(它的代码仅用于序列化普通对象,枚举和数组,而且没有CustomFieldSerializer)。因此,尝试使用类名而不是Class
个实例。