如何从序列化中排除GWT中的对象属性?

时间:2010-11-28 04:01:06

标签: java gwt serialization properties

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

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

4 个答案:

答案 0 :(得分:10)

  

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

我认为你要找的是@GwtTransient

  

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

     

这个注释意味着同样的事情   作为transient关键字,   但它被所有序列化忽略   GWT以外的系统。通常是   应使用transient关键字   偏好这个注释。   但是,对于使用多个类型   序列化系统,它可以   是有用的。

参考:@GwtTransient

答案 1 :(得分:6)

难道你不能简单地声明它是暂时的吗?

transient private String password;

答案 2 :(得分:4)

如果您确实想避免使用 transient 关键字,可能需要查看自定义字段序列化程序

在我上一个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编译器实际上可能出于性能原因要求使用这些静态方法(我没有研究过)。

尽管如此,它仍然有效,并且在特定情况下使用它们会很好。

答案 3 :(得分:0)

向场地添加瞬态