带序列化的 GWT
Posted
技术标签:
【中文标题】带序列化的 GWT【英文标题】:GWT with Serialization 【发布时间】:2016-06-09 13:15:24 【问题描述】:这是我的客户端代码,用于通过 RPC 调用获取字符串“get-image-data”并从服务器获取byte[]
。
CommandMessage msg = new CommandMessage(itemId, "get-image-data");
cmain.ivClient.execute(msg, new AsyncCallback<ResponseMessage>()
@Override
public void onFailure(Throwable caught)
@Override
public void onSuccess(ResponseMessage result)
if (result.result)
result.data is byte[].
);
从服务器端我得到的数据长度是 241336。
但我无法在onSuccess
方法中获得值。它总是使用onFailure
方法。
我登录了 Apache:
com.google.gwt.user.client.rpc.SerializationException: 类型“[B”是 不包含在可以由此序列化的类型集中 无法加载 SerializationPolicy 或其 Class 对象。
如何在 GWT 中进行序列化?
【问题讨论】:
ResponseMessage
长什么样子?该错误表示 byte[] cant 通过网络发送,在您的情况下,服务器表示不允许它发送该数据。
您使用的是什么版本的 GWT?我的直觉告诉我 byte[] 应该是可序列化的,但我会检查一下。
byte[] 绝对是可序列化的。 developerlife.com/tutorials/?p=131 检查您的浏览器是否缓存了旧编译的 JS。执行 Ctrl-F5 刷新缓存,它可能会起作用。
它可能可序列化,但前提是 rpc 服务已声明它是允许服务器发送的东西。
【参考方案1】:
1) 创建一个实现 Serializable 接口的 pojo 让这个 pojo 在 RPC 服务的响应中拥有你想要的所有数据,在本例中为 image-data
2) 在您的 RPC 服务的响应中传递这个 pojo。
下面的教程有足够的信息来创建 RPC 服务 http://www.gwtproject.org/doc/latest/tutorial/RPC.html
【讨论】:
【参考方案2】:您传入和传出服务器的对象必须实现 IsSerializable。
您要传输的对象中的所有自定义对象也需要实现 IsSerializable。
您的对象不能有最终字段,并且需要无参数构造函数。
您需要 getter 和 setter。
GWT 中常见的序列化对象:
public class MyClass implements IsSerializable
private String txt;
private MyOtherClass myOtherClass; // Also implements IsSerializable
public MyClass()
public String getTxt()
return this.txt;
public void setTxt(String txt)
return this.txt = txt;
public String getMyOtherClass()
return this.myOtherClass;
public void setMyOtherClass(MyOtherClass myOtherClass)
return this.myOtherClass = myOtherClass;
【讨论】:
以上是关于带序列化的 GWT的主要内容,如果未能解决你的问题,请参考以下文章