在我的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被调用。
我正在使用......
答案 0 :(得分:1)
事实证明,这个Spring-MVC和GWT混合技术正在我新工作的代码库中使用 - 难怪我得到的错误是类似的!感谢您的发布 - 它帮助我确定问题并修复它。我们的代码基于您发布的文章中的旧代码 - 或者代码基于的代码!抄袭比比皆是!
总而言之,该文章提出了一种将GWT与Spring-MVC集成的方法。解决方案的关键是提供一个Servlet servlet类,它将Spring MVC Controller与GWT RemoteServiceServlet相结合。不支持Serializable 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白名单。
答案 1 :(得分:0)
您收到的错误究竟是什么?我们正在为我们的DTO使用Serializable而没有任何问题,所以你也应该能够这样做。
答案 2 :(得分:0)
好的,我查看了Gwt-Spring-Article(我发布的链接)的评论并找到了解决方案。我不得不在流程调用方法中更改两行:
RPCRequest rpcRequest = RPC.decodeRequest(payload, this.remoteServiceClass, this);
return RPC.invokeAndEncodeResponse(this.remoteService, rpcRequest.getMethod(), rpcRequest.getParameters(), rpcRequest.getSerializationPolicy());