Jackson ignorer toutes les propriétés de la super-classe à partir d'une bibliothèque externe
Je suis en train d'élaborer à l'aide d'un ORM où j'étends une base orm classe pour créer des tables.
Par exemple:
public class Person extends DbItem {
@JsonIgnore
private String index;
private String firstName;
private String lastName;
}
Problème est que lorsque j'utilise ObjectMapper pour sérialiser, il essaie de sérialiser les membres de la DbItem classe. Est-il un moyen simple d'éviter cela? Par exemple, avec une annotation.
J'ai eu un coup d'oeil à un problème similaire Jackson sérialisation: comment ignorer les propriétés de la classe mère mais j'espérais que cela pourrait être fait au plus simple, et je ne suis pas sûr si je pouvais le faire, que je ne peux pas changer la super-classe depuis qu'il est dans une bibliothèque externe.
Avez-vous essayé de jouer avec
@JsonIgnoreProperties
au niveau de la classe, combiné avec @JsonProperty
pour la Person
les accessoires dont vous avez besoin? Pas sûr que c'est applicable tbh, juste une pensée.OriginalL'auteur simernes | 2015-04-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un Mélanger-en ou
@JsonIgnoreProperties
Pour l'application de ces exemples, la base de l'ORM de classe et l'extension sont supposés être:
et
respectivement.
À l'aide d'un Mélange de
Un Mélange est une abstraction de la de/de sérialisation des instructions que Jackson comprend à partir d'un objet lui-même. C'est une façon de personnaliser de/de sérialisation de la 3e partie des classes. Afin de définir un Mix-in, une classe abstraite doit être créé et enregistré avec le
ObjectMapper
.Exemple Mélange dans la Définition
L'enregistrement du Mix
@JsonIgnoreProperties
Si vous voulez éviter la création d'une classe et de la configuration de la
ObjectMapper
, le@JsonIgnoreProperties
annotation peut être utilisée. Simplement annoter la classe que vous la sérialisation et la liste des propriétés à exclure.Exemple Serializable Objet
De Les Voir En Action
il y a aussi un
@JsonIgnoreProperties
annotation peut être utilisée sur les enfants de la classe. La même chose s'applique, vous devez dresser une liste de toutes les propriétés que vous souhaitez exclure. Depuis la classe de base est une 3ème partie de la bibliothèque, je suppose que vous n'êtes pas la mise à jour de la version de la lib de votre projet? Je vous recommande d'écrire un test unitaire pour confirmer l'souhaité la sérialisation de laPerson
objet de sorte que vous savez quand la base a changé et que le Mélange sur les besoins de mise à jour.Qui pourrait être le chemin à parcourir effectivement, bonne idée.
Je vais mettre à jour la réponse à inclure un exemple de deux.
Ceci fonctionne même pour remplacer
@JsonIdentityInfo
annotations dans les super-classes. Super trouvaille!OriginalL'auteur Sam Berry
Vous voulez faire de champ personnalisé au niveau de la sérialisation. Ce sera un peu plus de travail pour maintenir votre base de code, mais c'est de loin la solution la plus simple. Voir Jackson JSON sérialisation personnalisée pour certains domaines pour les détails de mise en œuvre.
OriginalL'auteur Matthew Herbst