2010-11-28 21 views
6

Existe-t-il un moyen d'exclure les propriétés primitives et Object dans Serializable Object de GWT Serialization?Comment exclure la propriété d'objet dans GWT de la sérialisation?

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

Répondre

10

J'espérais quelque chose comme annotation spéciale

Je pense que ce que vous recherchez est @GwtTransient

@GwtTransient, une annotation qui dit GWT RPC pour traiter un champ comme si il a été marqué avec le mot-clé Java transitoire , même si ce n'est pas le cas.

Cette annotation signifie la même chose que le mot-clé transient, mais il est ignoré par tous les systèmes sérialisation autres que GWT de. Généralement, le mot-clé transient doit être utilisé dans la préférence pour cette annotation. Toutefois, pour les types utilisés avec plusieurs systèmes de sérialisation , il peut être utile .

Référence: @GwtTransient

6

Ne peux-tu pas le déclarer transitoire?

transient private String password; 
0

ajouter transitoire au champ

4

Si vous voulez vraiment éviter d'utiliser le mot-clé transitoire, vous voudrez peut-être regarder dans champs personnalisés Sérialiseurs.

Lors de mon dernier projet GWT, je les ai utilisés pour sérialiser des classes immuables, puisque GWT-RPC avait des limitations pour ceux-ci.

C'est une fonctionnalité mal documentée, et la meilleure explication que j'ai trouvée à ce moment-là n'était pas dans la documentation de GWT, mais sur this great wogwt wiki page. Vous pouvez également trouver quelques exemples dans le package com.google.gwt.user.client.rpc.core de GWT, car GWT en utilise beaucoup.

Veuillez noter que CustomFieldSerializers a encore quelques problèmes, tels que issue 2931 et issue 3315. De plus, je n'aime pas la façon dont ils sont définis: au lieu d'utiliser des méthodes statiques, il aurait été préférable de laisser les utilisateurs implémenter une interface CustomFieldSerializer<T>. Nous aurions gagné la sécurité de type et l'héritage. Mais il s'agit d'un tout autre débat, et le compilateur GWT pourrait en fait imposer l'utilisation de ces méthodes statiques pour des raisons de performance (je ne l'ai pas examiné).

Pourtant, cela fonctionne, et il est bon de les avoir dans des cas spécifiques.