【问题标题】:Serialize GWT value object and deserialize it at server side序列化 GWT 值对象并在服务器端反序列化它
【发布时间】:2011-06-01 16:40:49
【问题描述】:

我有一个需要支持下载大型 .csv 文件的 GWT 应用程序。这是通过一个 ReportServlet 完成的,它设置浏览器打开下载对话框和启动电子表格应用程序所需的正确内容类型和其他标题。

由于报告有几个过滤器参数,我需要以某种方式将它们传递给服务器。我不能使用 AJAX 回调,因为在这种情况下浏览器不会弹出下载对话框。 目前我通过为每个参数创建一个带有隐藏字段的表单并在服务器端手动解析它们来做到这一点。

如果有一个值对象的序列化器,将序列化的值放在 one 表单参数中,在服务器上反序列化并像在常规 RPC 中一样使用它,这将是一个更优雅的解决方案打电话。

起初我试图在 GWT 代码库中搜索一些序列化器/反序列化器 api,但我找不到任何东西。之后我搜索了 JSON 序列化器,但它们都没有简单的 API 或对 GWT 的支持。这两个 JSON 序列化器: http://code.google.com/p/gwtprojsonserializer/http://sites.google.com/site/gson/ 可能很棒,但是 gwtprojson 将日期序列化为时间戳,并将类名放在序列化字符串中,而 gson 作为日期格式字符串,序列化字符串中没有类名。

所以终于进入正题

谁能推荐一个在 GWT 和 java 中都可以工作的对象序列化器/反序列化器?不一定是 JSON,任何其他格式都可以。

有没有人使用上面提到的序列化程序库,或者使用其他可以在 GWT 中序列化和在 Java 中反序列化的库?

提前致谢! 佩蒂克

【问题讨论】:

    标签: gwt serialization


    【解决方案1】:

    您可以通过 OverlayTypes 在 GWT 中简单地生成 JSON:Json <-> Java serialization that works with GWT

    OTOH,如何分两步完成:

    1. 使用 RPC 将任意过滤器对象发送到服务器。服务器保存这个对象(数据库/内存缓存/会话取决于你的需要)并返回一个唯一的过滤器ID来标识这个过滤器对象。

    2. 使用文件过滤器 ID 作为唯一参数发出文件下载请求。服务器查找文件过滤器对象,准备 CSV 并将其发回。

    这样做的好处是:

    • 没有序列化/反序列化的痛苦。
    • 如果 CSV 生成需要很长时间,您可以在进行初始 RPC 时生成 CSV,并在 RPC 完成后开始下载。同时,您可以显示一个不错的对话框/通知。
    • 过滤器 ID 可能是一次性的/有时间限制的/IP 锁定的,因此用户无法记录 URL 并将其发送给其他人。

    【讨论】:

    • 覆盖类型的主要问题是我应该编写每个对象的 Java 对应项。我想我会试试你建议的两步法。
    【解决方案2】:

    我为 GSon 编写了一个自定义反序列化器。它非常简单,因此与 gwtprojsonserializer 配合使用效果很好。

    公共类 MyDateAdapter 实现 JsonDeserializer { /* *(非 Javadoc) * * @see com.google.gson.JsonDeserializer#deserialize(com.google.gson.JsonElement, * java.lang.reflect.Type, com.google.gson.JsonDeserializationContext) */ @覆盖 公共日期反序列化(JsonElement jsonElement,类型类型,JsonDeserializationContext ctx) 抛出 JsonParseException { 返回新日期(jsonElement.getAsJsonPrimitive().getAsLong()); } }

    我们需要注册我们的自定义反序列化器:

    GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.registerTypeAdapter(Date.class, new MyDateAdapter()); Gson gson = gsonBuilder.create();

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 2012-04-02
      • 1970-01-01
      • 2018-02-27
      相关资源
      最近更新 更多