Jackson - benutzerdefinierter Serializer, der nur bestimmte Felder außer Kraft setzt
Ich weiß, wie Sie eine benutzerdefinierte serializer in Jackson (durch die Verlängerung JsonSerializer
), aber ich möchte die Standard-serializer arbeiten für alle Felder, außer für nur 1 Feld, die ich überschreiben wollen, mithilfe der benutzerdefinierten Serialisierung.
Anmerkungen sind keine option, denn ich bin serialisieren einer generierten Klasse (aus Sparsamkeit).
Wie kann ich festlegen, nur bestimmte Felder überschrieben werden, beim schreiben einer benutzerdefinierten jackson serializer?
Update:
Hier ist die Klasse die ich serialisieren möchten:
class Student {
int age;
String firstName;
String lastName;
double average;
int numSubjects
//.. more such properties ...
}
Die obige Klasse hat viele properies, von denen die meisten den Einsatz von nativen Typen. Ich will nur überschreiben einige Eigenschaften, die Sie in die benutzerdefinierte serializer und lassen Jackson-deal mit dem rest wie üblich. Z.B. ich will einfach nur, um zu konvertieren, die "Alter" - Feld, um eine benutzerdefinierte Ausgabe.
InformationsquelleAutor der Frage jeffreyveon | 2013-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stand vor dem gleichen Problem, und ich löste es mit CustomSerializerFactory.
Dieser Ansatz ermöglicht Ihnen, ignorieren einige spezifische Feld für entweder für alle Objekte oder für bestimmte Arten.
Und danach können Sie es verwenden, so etwas wie die folgenden:
InformationsquelleAutor der Antwort n1ckolas
Vorausgesetzt, Ihr Ziel-Klasse ist
Müssen Sie schreiben eine benutzerdefinierte serializer wie unten angegeben
dann fügen Sie es zu dem ObjectMapper
dann verwenden Sie es wie
Es wird ein o/p wie
InformationsquelleAutor der Antwort Arun P Johny
Einfach, weil Sie können nicht ändern, Klassen bedeutet NICHT, dass Sie nicht verwenden konnten, Anmerkungen: nutzen Sie einfach die mix-in Anmerkungen. Sehen diese blog-Eintrag für Beispiel (oder google nach mehr mit "jackson mixin Anmerkungen"), wie dieses.
Habe ich speziell Jackson mit protobuf - und secondhand-Klassen, generiert, und Sie arbeiten ziemlich gut. Für frühere Sparsamkeit Versionen, ich hatte zu deaktivieren Entdeckung des "ist-setter" Methoden Sparsamkeit erzeugt, um zu sehen, wenn eine bestimmte Eigenschaft ausdrücklich gesetzt, aber ansonsten Dinge, die gut geklappt hat.
InformationsquelleAutor der Antwort StaxMan
mit der Hilfe von @JsonView wir entscheiden können, Felder der model-Klassen zu serialisieren, die erfüllen die minimalen Kriterien ( wir haben die Kriterien definieren) wie können wir eine core-Klasse mit 10 Eigenschaften, aber nur 5 Eigenschaften werden serialisiert, die notwendigen für den Kunden nur
Definieren unsere Ansichten, indem Sie einfach erstellen Sie folgende Klasse:
Kommentierte model-Klasse mit Aussicht:
Wir haben jetzt zu schreiben, benutzerdefinierte json-Konverter, indem HttpMessageConverter Klasse von Frühling:
Ist dort jetzt sagen müssen, Frühjahr verwenden Sie diese benutzerdefinierten json konvertieren, indem Sie diese in dispatcher-servlet.xml
Das ist, wie Sie in der Lage zu entscheiden, welche Felder zu bekommen serialisieren.
Danke
InformationsquelleAutor der Antwort user3820510