【问题标题】:How do you exclude object property in GWT from serialization?如何从序列化中排除 GWT 中的对象属性?
【发布时间】:2011-05-16 18:25:46
【问题描述】:

有没有办法从 GWT 序列化中排除 Serializable Object 中的原始和 Object 属性?

public class Provider implements Serializable{  
    public Provider() {  
    }  

    //Id like to exclude this property:   
        private String password;  
    //  

    private String address1;  
    private String address2;  
    private String companyName;  
    private String phone;  
}

【问题讨论】:

    标签: java gwt serialization properties


    【解决方案1】:

    我希望有类似的东西 特殊注释

    我想你要找的是@GwtTransient

    @GwtTransient,一个注解 告诉 GWT RPC 将字段视为 它被标记为 Java 瞬态 关键字,即使不是。

    这个注解意思是一样的 作为transient 关键字, 但它被所有序列化忽略 GWT 以外的系统。通常情况下 transient 关键字应用于 偏好此注释。 但是,对于与多个一起使用的类型 序列化系统,它可以是 有用。

    参考:@GwtTransient

    【讨论】:

      【解决方案2】:

      你不能声明它是暂时的吗?

      transient private String password;
      

      【讨论】:

        【解决方案3】:

        如果您真的想避免使用 transient 关键字,您可能需要查看 Custom Field Serializers

        在我上一个 GWT 项目中,我使用它们来序列化不可变类,因为 GWT-RPC 对这些有限制。

        这是一个记录不充分的功能,我当时找到的最佳解释不在 GWT 文档中,而是在 this great wogwt wiki page 上。您还可以在 GWT 的 com.google.gwt.user.client.rpc.core 包中找到一些示例,因为 GWT 使用了很多。

        请注意,CustomFieldSerializers 仍然存在一些问题,例如issue 2931issue 3315。另外,我不喜欢它们的定义方式:与其使用静态方法,不如让用户实现CustomFieldSerializer<T> 接口。我们将获得类型安全和继承。但这是另一回事,GWT 编译器实际上可能出于性能原因强制使用这些静态方法(我还没有研究过)。

        不过,它仍然有效,并且在特定情况下使用它们是件好事。

        【讨论】:

          【解决方案4】:

          在字段中添加瞬态

          【讨论】:

            猜你喜欢
            • 2012-04-27
            • 1970-01-01
            • 2015-07-03
            • 1970-01-01
            • 2012-05-15
            • 1970-01-01
            • 1970-01-01
            • 2010-10-18
            • 2019-11-18
            相关资源
            最近更新 更多