1

在我的 GWT 应用程序中,我有以下模型类:

import com.google.gwt.user.client.rpc.IsSerializable;

public class TestEntity implements IsSerializable {
    public String testString;
}

这个类实现了 GWT 自定义 IsSerializable 标记接口——我真的不喜欢它,因为我不仅将模型类用于 GWT。所以我更喜欢 java.io.Serializable。

但是如果我修改类以实现 Serializable 而不是 IsSerializable,则 GWT RPC 机制不再起作用。我在服务器端没有收到错误,但在客户端调用了 AsyncCallback.onFailure。

我在用...

4

3 回答 3

1

事实证明,这种 Spring-MVC 和 GWT 混合技术正在我的新工作的代码库中使用 - 难怪我得到的错误是相似的!感谢这篇文章 - 它帮助我发现了问题并解决了它。我们拥有的代码基于您发布的文章中的旧代码 - 或者该代码所基于的任何代码!抄袭比比皆是!

总而言之,那篇文章提出了一种将 GWT 与 Spring-MVC 集成的方法。解决方案的关键是提供一个 Servlet servlet 类,它结合了 Spring MVC Controller 和 GWT RemoteServiceServlet。不支持可序列化 DTO 对象,因为(我认为)代码基于 GWT-1.4 之前的代码,无法处理未实现 GWT 的 isSerializable 标记接口的 DTO。一旦你知道发生了什么,对控制器类的更新就非常简单了......

我看到的两条固定行只是通过 SerializationPolicyProvider(这是 RPC.decodeRequest() 方法的最后一个参数中的“this”。调用类扩展了 GWT 的 RemoveServiceServlet,它是一个 SerializationPolicyProvider)。我认为这个简单的修复会导致调用更新的(1.4 后)GWT 代码,它可以处理 Serializable 和 isSerializable 类。SerializationPolicyProvider 查看 serializationPolicy。

第二个修复将 serializationPolicy 传递给 RPC.invokeAndEncodeResponse() 方法。我认为这是编译 GWT 模块时验证的 DTO 对象的 *.gwt.rpc 白名单。

于 2010-03-30T23:07:00.380 回答
0

您收到的错误究竟是什么?我们正在为我们的 DTO 使用 Serializable 没有任何问题,所以你应该也可以。

于 2009-08-29T12:27:45.627 回答
0

好的,我浏览了 Gwt-Spring-Article 的评论(我发布的链接)并找到了解决方案。我不得不在流程调用方法中更改两行:

RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass, this);
return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());
于 2009-08-29T15:49:42.987 回答