【问题标题】:Flex blazeds/lcds AMF serialization for transient variablesFlex blazeds/lcds 瞬态变量的 AMF 序列化
【发布时间】:2011-11-12 12:16:18
【问题描述】:

我正在使用 LCDS 和 Flex。 当我将一个对象从 java 发送到 Flex 时,我不想发送所有属性。据我所知,如果您不想序列化,请制作一个瞬态变量。

例如。

 private transient Date birthDate;

 public Date getBirthDate(){  
    return birthDate;
 }

 public void setBirthDate(Date val){
    birthDate = val;
    //Some code here.
 }

现在序列化的对象中不应该有birthDate。但是,当我看到 AMF 日志时,该对象中包含有值的birthDate。
序列化是否会查看代码并检查私有变量是瞬态的。(我不明白它如何访问私有属性。我有点困惑。)
我应该将变量标记为公开吗?然后getter和setter没有意义,而且我在setter方法中编写了一些代码。所以我需要二传手。

问题:

  1. 我在一本书(Enterprise flex with blazeds by Brain Telintelo,第 15 章)中读到,开箱即用的 Blazeds 只序列化具有匹配的 getter 和 setter 的文件。如果是这样的话,will blazeds 甚至会费心去检查私有财产是否是暂时的。

  2. 能否请一些人解释一下正常的序列化(不是 amf 序列化)是如何发生的并跟踪私有瞬态变量,即使它们有公共的 getter 和 setter。

  3. 如何使 java 变量在 Flex/LCDS/BlazeDS 环境中不序列化。

我在对象中有 50-60 个变量,不应该对 4 或 5 个变量进行序列化。所以在这么大的对象中编写自定义序列化器是一个很大的痛苦。我看到的另一个缺点是,如果我编写自己的序列化程序,hibernate 将无法使用此对象。

【问题讨论】:

    标签: apache-flex serialization blazeds amf transient


    【解决方案1】:

    我通常使用 Granite Data Services(而不是 LCDS 或 Blaze),但您是否尝试过使用 [Transient] ActionScript 标签? (当然,如果您正在生成 .as 类,这可能是一个问题 - 也许有一个 @Transient 注释?)

    http://livedocs.adobe.com/flex/3/html/help.html?content=metadata_3.html

    其工作方式取决于谁(什么)在进行序列化。例如,我相信 Granite 的行为与 Blaze 略有不同。我不认为 Granite 序列化私有属性(可能记错了)。我还记得几年前,我为 Granite 创建了一个自定义序列化类,它告诉它忽略带有“瞬态”Java 关键字的字段(使用反射)。

    我不知道您是否可以在 Blaze/LCDS 中实现自定义序列化逻辑(同样容易),但这也可能值得研究。这不是一个巨大的痛苦(如你所说),因为它只是我自定义的一个类,但我再次确定这很简单 w/Granite。

    为此可能有一两个辅助库。这个人写了这个http://www.flexpasta.com/index.php/2008/05/19/blazeds-with-annotations-for-remote-objects/ 似乎正在做你所要求的反向。 (没有 setter 时强制序列化。)

    【讨论】:

    • 是的,LCDS / BlazeDS 中的自定义序列化是可能的,而且非常简单。我正要发布同样的 FlexPasta 示例(你打败了我)。
    【解决方案2】:

    将[Transient]放在getter上就足够了,把它放在setter上是多余的和多余的,并且会在编译器警告中重新出现。

    【讨论】:

      【解决方案3】:

      如果你想排除一个 Java 属性被序列化为 Flex,这里有一个关于同一问题的帖子:https://stackoverflow.com/a/22328869/244911

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        • 2012-06-23
        • 1970-01-01
        • 2020-05-05
        • 2010-12-27
        • 1970-01-01
        相关资源
        最近更新 更多