我在与GWT项目分开的项目中有一些DTO,并且我试图将它们用作GWT项目中的DTO。他们实施Serializable
以用于其他服务。目前,因为我不希望在GWT RPC服务接口方法签名中全部引用它们,所以我必须采用“欺骗”GWT的技术,将序列化的类列入白名单,方法是使虚拟方法不执行任何操作,从不调用。< / p>
我不想在GWT项目中创建单独的IsSerializable
类,以便不重复代码,但也不需要虚拟方法。
我想到的另一个选择是添加(a)GWT jar作为包含我的DTO的项目的依赖项,以便它们可以同时实现Serializable
和IsSerializable
。搜索同时成为Serializable
和IsSerializable
主题的讨论只会引发关于在两者之间进行选择的讨论。
一个类可以实现Serializable
和IsSerializable
而不会出现并发症吗?
答案 0 :(得分:1)
您使用的是哪个版本的GWT?如果它是最近的(> 1.4)那么,据我所知,GWT documentation表示您可以直接使用Serializable
个对象:
GWT团队认为社区普遍意识到这些 问题但更喜欢能够使用标准的便利性 java.io.Serializable接口而不是拥有它们的类 实现isSerializable标记接口,虽然都是标记 GWT 1.4和。支持表示可序列化类的接口 后来。考虑到这一点,GWT团队对GWT RPC进行了更改 系统支持使用java.io.Serializable进行数据传输 将被转移的对象(通常称为DTO) 电线。但是,有一个条件可以支持 新GWT RPC系统中的java.io.Serializable。
答案 1 :(得分:0)
我尝试实现IsSerializable
和Serializable
,因为我希望能够将我的DTO保存到Http会话中并通过群集复制它们。我也喜欢允许旧客户端(使用无效策略)能够使用IsSerializable
提供的新服务(当然是具有相同签名的服务)的想法。但是当回退到1.3.3行为(没有有效的策略)并且在DTO中实现两个接口时,GWT变得疯狂(客户端反序列化器试图实例化一个名为String内容的类)。一旦我摆脱Serializable
,GWT RPC系统就可以再次运行了。
编辑:奇怪的是,我在删除Serializable
后再次尝试将其放回我的DTO中。它奏效了。我一直在开发模式下测试,也许是插件的错误?