2010-06-05 11 views
10

Ich versuche, Java-Objekt zu JSON-Objekt in Tomcat/Jersey mit Jackson zu konvertieren. Und möchte die Serialisierung (Schreiben) bestimmter Eigenschaften dynamisch unterdrücken.Jackson - Serialisierung (Schreiben) von Eigenschaften dynamisch unterdrücken

Ich kann JsonIgnore verwenden, aber ich möchte die Ignore-Entscheidung zur Laufzeit treffen. Irgendwelche Ideen??

So als Beispiel unten, ich will „id“ Feld zu unterdrücken, wenn ich das Benutzerobjekt zu JSON serialisiert ..

new ObjectMapper.writeValueAsString(user); 


class User { 

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

//getters 
//setters 

}//end class 

Antwort

0

Ich sehe keinen Weg, dies zu tun. Wenn Sie dynamisch entscheiden müssen, welche Eigenschaften gemarshallt werden, schlage ich vor, dass Sie manuell einen Map Schlüssel zu den Werten für Ihre Objekte erstellen und dann diesen Map an Jackson übergeben, statt das User Objekt direkt zu übergeben.

+0

danke. Ich denke, das Map-Muster ist auch etwas schwach, wenn es darum geht, JSON-Arrays zu erstellen. Zuordnung map1 = new HashMap (); map1.put ("fname", "Steve"); map1.put ("lname", "Colly"); \t \t Zuordnung map2 = new HashMap (); map2.put ("fname", "Josh"); map2.put ("lname", "Roff"); Liste jsonArray = new ArrayList(); jsonArray.add (Karte1); jsonArray.add (Karte2); neuer ObjectMapper(). WriteValueAsString (jsonArray) ... erzeugt nicht ??? [{'fname': 'Steve','name ':' Colly '}, {' fname ':' Josh ',' lname ':' Roff '}] – kapso

+0

@ kapil.isr: Ja, tut es, ich habe es gerade versucht, es funktioniert gut. Die Reihenfolge der Schlüssel ist unterschiedlich, aber das liegt daran, dass Sie eine 'HashMap' anstelle einer' LinkedHashMap' verwendet haben. – skaffman

+0

o ja, es funktioniert, sorry typo :) vielen dank !! – kapso

2

prüfen

ObjectMapper.configure(SerialiationJson.Feature f, boolean value) 

und

org.codehaus.jackson.annotate.JsonIgnore 

Anmerkung

Dies funktioniert nur, wenn Sie alle Instanzen eines bestimmten Typs wollen id auf die Serialisierung zu ignorieren. Wenn Sie wirklich dynamische (alias per instance customization) wollen, werden Sie wahrscheinlich die jackson-Bibliothek selbst hacken müssen.

0

Haben Sie versucht mit JSON Views? Ansichten ermöglichen einen auf Annotationen basierenden Mechanismus zum Definieren verschiedener Profile. Wenn Sie also nur leicht unterschiedliche Ansichten für verschiedene Benutzer benötigen, könnte dies für Sie funktionieren.

Verwandte Themen