GWT与序列化

时间:2016-06-09 13:15:25

标签: serialization gwt

这是我的客户端代码,通过RPC调用获取字符串“get-image-data”并从服务器获取import React from 'react'; import { imgUrl } from './environment'; export default class HiwComponent extends React.Component { render() { return ( <main className="box-960 box-center"> <h1 className="mt-64">How It Works</h1> <ul id="how"> <li> <img src={`${imgUrl}assets/img/ico-how-time.svg`} onError={() => { this.onerror=null; this.src=`${imgUrl}assets/img/ico-how-time.png` }} alt="Pick" /> <p><b>Pick</b> a time</p> </li> <li> <img src={`${imgUrl}assets/img/ico-how-plane.svg`} onError={() => { this.onerror=null; this.src=`${imgUrl}assets/img/ico-how-plane.png` }} alt="Send" /> <p><b>Send</b> request</p> </li> </ul> </main> ) } }

byte[]

从服务器端我得到的数据长度是241336。 但我无法在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[]. } } }); 方法中获得价值。始终是onSuccess方法。

我登录了Apache:

  

com.google.gwt.user.client.rpc.SerializationException:输入'[B'是   不包括在可以通过此序列化的类型集中   无法加载SerializationPolicy或其Class对象。

如何在GWT中进行序列化?

2 个答案:

答案 0 :(得分:1)

1)创建一个实现Serializable接口的pojo    让这个pojo在RPC服务的响应中包含您想要的所有数据,在本例中为image-data

2)在您的RPC服务的响应中传递此pojo。

以下教程有足够的信息来创建RPC服务 http://www.gwtproject.org/doc/latest/tutorial/RPC.html

答案 1 :(得分:1)

  1. 您与服务器之间传输的对象必须实现IsSerializable。

  2. 您传输的对象中的所有自定义对象也需要实现IsSerializable。

  3. 您的对象不能包含最终字段,并且需要无参数构造函数。

  4. 你需要吸气剂和制定者。

  5. 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;
           }
    }