Maison  >  Article  >  Java  >  Comment puis-je exclure sélectivement des champs de la sérialisation JSON sans affecter la désérialisation ?

Comment puis-je exclure sélectivement des champs de la sérialisation JSON sans affecter la désérialisation ?

DDD
DDDoriginal
2024-11-24 13:28:12520parcourir

How Can I Selectively Exclude Fields from JSON Serialization Without Affecting Deserialization?

Application sélective de @JsonIgnore : résolution de l'exclusion de sérialisation uniquement

Lors de l'échange de données avec un serveur, un objet utilisateur peut contenir des informations sensibles qui doit être caché aux clients pendant la sérialisation. Une approche souvent utilisée consiste à appliquer l'annotation @JsonIgnore pour masquer les propriétés sensibles. Cependant, cela peut également interférer avec la désérialisation, créant des défis dans des scénarios spécifiques.

Comprendre le problème

L'annotation @JsonIgnore sur une propriété empêche son inclusion dans la sérialisation JSON. Cependant, si la même propriété est nécessaire lors de la désérialisation (par exemple pour créer un compte utilisateur), l'exclusion devient problématique.

Exclusion sélective avec @JsonIgnore

Pour résoudre ce problème, deux approches différentes peuvent être adoptées selon la version de Jackson utilisée :

Versions de Jackson antérieures à 1.9 :

  • Utilisation de @JsonIgnore sur le Getter :Annoter uniquement la méthode getter permet d'inclure la propriété lors de la désérialisation et d'en exclure lors de la sérialisation.

Jackson versions 1.9 et plus tard :

  • @JsonProperty avec READ_ONLY : En ajoutant les arguments d'annotation @JsonProperty(access = JsonProperty.Access.READ_ONLY) au setter, vous pouvez spécifier que le la propriété est uniquement accessible en écriture et exclue pendant sérialisation.

Exemple :

Considérez un objet utilisateur avec un champ de mot de passe :

@JsonIgnore
private String password;

// Setter with READ_ONLY access (Jackson 1.9 and later)
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
public void setPassword(String password) {
    this.password = password;
}

Remarque :

  • L'utilisation de READ_ONLY garantit que le mot de passe n'est utilisé que pour désérialisation.
  • Les deux approches ont été vérifiées et fonctionnent comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn