繁体   English   中英

在GWT中序列化对象

[英]Serialize Object in GWT

使用GWT将bean序列化为字符串的最简单方法是什么? 我不想使用GWT.create()调用。

免责声明:在URL上序列化bean对于GWT来说并不是一个好主意。 我已经了解到,如果需要在URL上放置数据,它应该尽可能少,只有恢复页面状态所需的内容。 看看Gmail如何使用其历史记录令牌,您会发现它非常小。

有了免责声明:

对于我工作的GWT项目,我只是写出了由分隔符分隔的bean的值。 当重新读取值时,我使用String.split()方法获取数组。 使用该数组,我将值分配回正确的bean属性。 在代码中:

public class Sample {

    private int a;
    private boolean b;
    private String c;
    //getters and setters for fields not shown

    public String toHistoryToken(){
        return a+"/"+b+"/"+c;
    }
    public void fromHistoryToken(String token){
        String[] values=token.split("/");
        a=Integer.parseInt(values[0]);
        b=Boolean.parseBoolean(values[1]);
        c=values[2];
    }
}

对于更复杂的场景,您可能需要做更复杂的事情。 例如,对于嵌套对象,您必须编写代码以将值传递给子对象。

此外,请注意,您必须确保您使用的任何值都不包含分隔符。 因此,如果您知道您的字符串可能包含“/”,那么您可能必须对它们执行replace()操作以转义任何嵌套分隔符。

我不确定我是否理解你最终想要完成的事情。

如果你真的只想来回发送字符串,你真的不需要做任何事情 - 你可以使用普通的GWT RPC机制免费获得。 只需创建一个返回java.lang.String的方法,创建伴随的实现和Async接口,就完成了。

另一方面,如果你真的想发送一个bean,只需确保它有一个零参数构造函数并实现SerializableIsSerializable

也许这就是你要找的东西?

Json < - >与GWT一起使用的Java序列化

扩大的视野:

使用Json-lib库:

http://json-lib.sourceforge.net/

你可以这样做(从bean到json字符串):

http://json-lib.sourceforge.net/snippets.html#Creating_a_JSONObject_from_a_JavaBean

GWT可能会有一些细微差别使事情变得复杂,但通常情况如下:

  • JAXBXStream这样的XML数据绑定/映射库可以做到这一点
  • 使用JSON,像Jackson这样的库可以执行灵活的全bean绑定,类似于JAXB,但配置更少(如果重要的话,速度更快)。

应该管用。

最终GWT在JavaScript中运行(即使它是用Java编写的)。 从这个意义上说,“java bean”不是你在客户端很容易找到的东西,但它们在服务器中运行良好(在Java中)。

如果您接受bean实际上只是一个无方法对象,那么使用它们的潜在意图就是移动数据。 JSON本身就是JavaScript,它也是一个非常灵活的数据容器。 在服务器端,可以使用BeanUtils(以及一些遍历)将Beans数组转换为JSON。 JSON可以在GWT中作为字符串序列化,GWT有一个解析器将JSON转换回客户端的JavaScript对象。

这可能不是最简单的方法,但是一旦你开始工作它就非常灵活。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM