11
votes

Jackson - supprimer la sérialisation (écrire) de propriétés de manière dynamique

J'essaie de convertir l'objet Java à l'objet JSON à Tomcat / Jersey en utilisant Jackson. Et souhaitez supprimer la sérialisation (écrire) de certaines propriétés de manière dynamique.

Je peux utiliser JSONIGNORE, mais je veux faire la décision d'ignorer au moment de l'exécution. Toutes idées ?? p>

Donc, à titre d'exemple ci-dessous, je veux supprimer le champ "ID" lorsque je serai sérialiser l'objet utilisateur à JSON .. P>

new ObjectMapper.writeValueAsString(user);


class User {

private String id = null;
private String firstName = null;
private String lastName = null;

//getters
//setters

}//end class


0 commentaires

4 Réponses :


0
votes

Je ne vois aucune façon de le faire. Si vous avez besoin de décider de manière dynamique quelles propriétés sont marshalées, je vous suggère de construire manuellement une carte de clés sur les valeurs de vos objets, puis passez ce carte à Jackson, plutôt que de passer directement l'objet utilisateur .


5 commentaires

Merci. Je pense que le modèle de carte est un peu faible aussi, quand il s'agit de créer des matrices JSON. Mapper map1 = nouveau hashmap (); map1.put ("fname", "steve"); map1.put ("lname", "colly"); Mapper map2 = nouveau hashmap (); map2.put ("fname", "josh"); map2.put ("LNAME", "ROFF"); Liste Jsonarray = New ArrayList (); jsonarray.add (MAP1); jsonarray.add (MAP2); Nouveau ObjectMapper (). Writevalueasstring (Jsonarray) ... ne produit pas ??? [{'FNAME': 'Steve', 'LName': 'Colly'}, {'Fname': 'Josh', 'LNAME': 'ROFF'}]


@ kapil.isr: Oui, je le fait, je viens de l'essayer, ça marche bien. L'ordre des clés est différent, mais c'est parce que vous avez utilisé un hashmap plutôt qu'un linkedhashmap .


Savez-vous également si ObjectMapper peut être partagé entre les threads, je sais que Doc affirme qu'elle le peut. Mais je voulais juste m'assurer, si c'est le cas. Il ne semble pas y avoir beaucoup d'informations sur Jackson là-bas, leur propre doc semble limité.


ObjectMapper peut être partagé, oui.


Je ne suis pas tout à fait sûr de savoir pourquoi vous oublieriez une garantie explicite par l'auteur (s) de la bibliothèque (je suppose que vous vous référez à wiki .fasterxml.com / jacksonfaq , "est le fil de l'objetMapper?"), mais oui, il est entièrement partageable tant que vous n'essayez pas de modifier les paramètres de configuration lors du partage.



2
votes

vérifier xxx

et xxx

annotation

Ceci ne fonctionnera que lorsque vous voulez toutes les instances d'une certain type pour ignorer l'identifiant sur la sérialisation. Si vous voulez vraiment la dynamique (AKA par Personnalisation de l'instance), vous devez probablement pirater vous-même la bibliothèque Jackson.


0 commentaires

0
votes

Avez-vous essayé d'utiliser JSON Vues ? Les vues permettent un mécanisme basé sur l'annotation pour définir différents profils. Si vous avez juste besoin d'une vue légèrement différente pour différents utilisateurs, cela pourrait fonctionner pour vous.


0 commentaires

4
votes

Oui, la vue JSON est la voie à suivre.

Si vous par exemple. Besoin de laisser le client à décider quels champs à maréchal, cet exemple pourrait aider: http://svn.codehaus.org/jackson/tags/1.6/1.6.3/src/sample/customserializationView.java


2 commentaires

Ce lien nécessite une authentification


Ce lien ne fonctionne plus, mais je suppose que le lien suivant sera un équivalent .. github.com/fasterxml/jackson-1/blob/master/src/sample/sample / ...