Le comportement de jackon par défaut semble utiliser à la fois les propriétés (getters et setters) et les champs pour sérialiser et désérialiser en json.
Je voudrais utiliser les champs comme source canonique de la configuration de sérialisation et je ne veux donc pas que Jackson regarde du tout les propriétés.
Je peux le faire sur une base de classe individuelle avec l'annotation:
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Mais je ne veux pas avoir à mettre ça sur chaque classe ...
Est-il possible de configurer cela globalement? Vous aimez en ajouter à l'Object Mapper?
INFER_PROPERTY_MUTATORS
drapeau. Il force la visibilité des setters s'il y a un getter ou un champ visible.Réponses:
Vous pouvez configurer des ObjectMappers individuels comme ceci:
Si vous voulez qu'il soit défini globalement, j'accède généralement à un mappeur configuré via une classe wrapper.
la source
withGetterVisibility
ne couvre pas lesis*
méthodes, mais il y en awithIsGetterVisibility
pour elles.setVisibilityChecker
est obsolète. UtilisezsetVisibility
plutôt.Dans Jackson 2.0 et versions ultérieures, vous pouvez simplement utiliser:
pour désactiver la détection automatique.
la source
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)
Ensuite, vous devez annoter chaque propriété que vous souhaitez inclure avec@JsonProperty
Spécifiquement pour les
boolean is*()
getters:J'ai passé beaucoup de temps sur pourquoi ni en dessous
ni ça
a travaillé pour mon Boolean Getter / Setter.
La solution est simple:
MISE À JOUR: spring-boot autorisé le configurer:
Voir les propriétés d'application communes # JACKSON
la source
pour jackson 1.9.10 j'utilise
pour désactiver la déduction automatique.
la source
Que diriez-vous de ceci: je l'ai utilisé avec un mixin
objet non conforme
Mixin:
Usage:
Il n'y a rien qui dit que vous ne pouvez pas foreach un certain nombre de classes et appliquer le même mixin.
Si vous n'êtes pas familier avec les mixins, ils sont conceptuellement simples: la structure du mixin est superposée à la classe cible (selon jackson, pas en ce qui concerne la JVM).
la source
Si vous souhaitez un moyen de le faire globalement sans vous soucier de la configuration de votre
ObjectMapper
, vous pouvez créer votre propre annotation:Il ne vous reste plus qu'à annoter vos cours avec
@JsonExplicit
et vous êtes prêt à partir!Assurez-vous également de modifier l'appel ci-dessus pour
@JsonAutoDetect
vous assurer que les valeurs sont définies sur ce qui fonctionne avec votre programme.Merci à https://stackoverflow.com/a/13408807 pour m'avoir aidé à en savoir plus
@JacksonAnnotationsInside
la source
Si vous utilisez Spring Boot, vous pouvez configurer Jackson globalement comme suit:
la source