J'ai un objet utilisateur qui est envoyé vers et depuis le serveur. Lorsque j'envoie l'objet utilisateur, je ne veux pas envoyer le mot de passe haché au client. J'ai donc ajouté @JsonIgnore
la propriété de mot de passe, mais cela l'empêche également d'être désérialisé dans le mot de passe, ce qui rend difficile l'inscription des utilisateurs lorsqu'ils n'ont pas de mot de passe.
Comment puis-je seulement @JsonIgnore
appliquer à la sérialisation et non à la désérialisation? J'utilise Spring JSONView, donc je n'ai pas une tonne de contrôle sur ObjectMapper
.
Ce que j'ai essayé:
- Ajouter
@JsonIgnore
à la propriété - Ajouter
@JsonIgnore
uniquement sur la méthode getter
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Pour ce faire, il suffit de deux annotations:
@JsonIgnore
@JsonProperty
Utiliser
@JsonIgnore
sur le membre de classe et son getter, et@JsonProperty
sur son setter. Un exemple d'illustration aiderait à faire ceci:la source
Depuis la version 2.6: une manière plus intuitive est d'utiliser l'
com.fasterxml.jackson.annotation.JsonProperty
annotation sur le terrain:Même s'il existe un getter, la valeur du champ est exclue de la sérialisation.
JavaDoc dit:
Si vous en avez besoin dans l'autre sens, utilisez-le
Access.READ_ONLY
.la source
Dans mon cas, j'ai Jackson (dé) sérialise automatiquement les objets que je renvoie d'un contrôleur Spring MVC (j'utilise @RestController avec Spring 4.1.6). J'ai dû utiliser
com.fasterxml.jackson.annotation.JsonIgnore
au lieu deorg.codehaus.jackson.annotate.JsonIgnore
, car sinon, cela n'a tout simplement rien fait.la source
la source
Un autre moyen simple de gérer cela est d'utiliser l'argument
allowSetters=true
dans l'annotation. Cela permettra de désérialiser le mot de passe dans votre dto mais il ne le sérialisera pas dans un corps de réponse qui utilise contient un objet.exemple:
Les deux
foo
etbar
sont remplis dans l'objet, mais seul foo est écrit dans un corps de réponse.la source