Comment puis-je exclure des domaines avec Jackson pas à l'aide d'annotations?
J'ai besoin d'exclure certains domaines, par des noms avant le rendu. La liste des champs est dynamique, donc je ne peux pas utiliser les annotations.
J'ai essayé de créer des sérialiseur mais je ne peux pas obtenir le champ nom.
Dans GSON j'ai utilisé ExclusionStrategy
, mais Jackson n'a pas cette fonctionnalité. Est-t-il un équivalent?
- êtes-vous essayer de les exclure des propriétés au moment de l'exécution? Par exemple, vous avez une carte, et que vous souhaitez exclure certaines propriétés à l'intérieur?
- oui, mais il convient de notation par points d'exclusion comme
order.id
order.content.items
Vous devez vous connecter pour publier un commentaire.
L'exemple ci-dessous de l'exclusion des champs par nom de mon blog, Gson v Jackson - Partie 4. (Recherche de la
PropertyFilterMixIn
.) Cet exemple illustre l'utilisation d'unFilterProvider
avec unSimpleBeanPropertyFilter
àserializeAllExcept
spécifié par l'utilisateur de la liste des noms de champ.(Note: Le API peut avoir légèrement changé avec une récente Jackson version.)
Tandis que l'exemple n'utilise apparemment inutile d'annotation l'annotation n'est pas appliquée dans les champs, pour être exclus. (Pour aider à obtenir l'API a changé pour simplifier la configuration nécessaire un peu, s'il vous plaît n'hésitez pas à voter pour la mise en œuvre de problème JACKSON-274.
something.items
(excluse éléments avec de la racine de quelque chose)J'ai écrit une bibliothèque de traiter avec un semblable cas d'utilisation. J'avais besoin de programmation pour ignorer les champs en fonction de l'utilisateur de la demande de données. La normale Jackson options étaient tout simplement trop lourde, et j'ai détesté la façon dont il fait mon code.
La bibliothèque, en fait un ensemble beaucoup plus facile à comprendre. Il vous permet de simplement faire ceci:
Le code est disponible sur GitHub, j'espère que ça aide!
Jackson s'appuie sur les annotations pour la plupart des choses de ce genre; mais vous n'avez pas à annoter directement les classes de valeur. Vous pouvez également utiliser le "mix-dans les annotations" (voir http://www.cowtowncoder.com/blog/archives/2009/08/entry_305.html).
Et puis, il ya quelques options que vous pouvez utiliser au-delà de base
@JsonIgnore
(par propriété) ou@JsonIgnoreProperties
(par classe), voir http://www.cowtowncoder.com/blog/archives/2011/02/entry_443.htmlSi vous avez des filtres définis sur deux ou plus de pojo, vous pouvez essayer ceci:
J'ai écrit une bibliothèque appelée Squiggly Filtre, qui sélectionne les champs basés sur un sous-ensemble de l'Facebook API Graphique de la syntaxe. Par exemple, pour sélectionner le code postal de l'adresse de domaine de l'utilisateur de l'objet, vous pouvez utiliser la chaîne de requête
?fields=address{zipCode}
. Un des avantages de Enchevêtrées Filtre est que, aussi longtemps que vous avez accès à la ObjectMapper qui rend le json, vous n'avez pas à avoir à modifier le code d'un de vos méthodes de contrôleur.En supposant, vous êtes à l'aide de la servlet API, vous pouvez effectuer les opérations suivantes:
1) Enregistrer un filtre
2) Initialiser le ObjectMapper
3) Vous pouvez maintenant filtrer votre json
Plus d'informations sur Enchevêtrées Filtre est disponible sur github.