188 votes

Jackson: comment empêcher le domaine de la sérialisation

J'ai une classe d'entité avec un champ de mot de passe:

class User {
    private String password;

    //setter, getter..
}

Je veux que ce champ soit ignoré lors de la sérialisation. Mais il devrait encore être en mesure de Désérialiser. C'est nécessaire, de sorte que le client peut m'envoyer un nouveau mot de passe, mais n'est pas capable de lire le cours.

Comment puis-je réaliser cela avec Jackson?

221voto

Biju Kunjummen Points 20258

Vous pouvez le marquer comme @JsonIgnore , ou une autre façon est de marquer le champ transitoire - private transient String password

103voto

user1369168 Points 542

En illustrant ce StaxMan a déclaré, cela fonctionne pour moi

@JsonIgnore
public String password;

@JsonIgnore
public String getPassword() {
    return password;
}

@JsonProperty
public void setPassword(String password) {
    this.password = password;
}

41voto

Joe Allen Points 111

Le plus simple est d'annoter vos getters et setters.

Voici l'exemple d'origine modifié pour exclure la plaine de texte mot de passe, mais ensuite annoter une nouvelle méthode qui retourne le champ mot de passe que le texte chiffré.

class User {
    private String password;

    public void setPassword(String password){...}
    @JsonIgnore
    public String getPassword(){...}

    @JsonProperty("password"}
    public String getEncryptedPassword(){...}
}

20voto

StaxMan Points 34626

Hormis @JsonIgnore, pourrait à d'autres possibilités:

  • L'utilisation de JSON Vues pour filtrer les champs de façon conditionnelle (par défaut, ne sont pas utilisés pour la désérialisation; dans la version 2.0 sera disponible, mais vous pouvez utiliser de vue différents sur la sérialisation, la désérialisation)
  • @JsonIgnoreProperties de la classe peut être utile

13voto

maxxyme Points 94

transient est la solution pour moi. merci! il est originaire de Java et vous évite d'ajouter un autre cadre spécifique de l'annotation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X