Jackson: So fügen Sie benutzerdefinierte Eigenschaften zu JSON hinzu, ohne das POJO zu ändern

Ich bin die Entwicklung einer REST-Schnittstelle für meine app mit Jackson zu serialisieren mein POJO domain-Objekte für JSON-Darstellung. Ich möchte zum anpassen der Serialisierung für einige Arten, zum hinzufügen von zusätzlichen Eigenschaften, um die JSON-Darstellung, die nicht in POJOs (z.B. hinzufügen von Metadaten, Referenzdaten, etc). Ich weiß, wie das schreiben meiner eigenen JsonSerializeraber in diesem Fall würde ich explizit nennen JsonGenerator.writeXXX(..) Methoden für jeder Eigenschaft des Objekts, während alle, die ich brauchen, ist nur zu hinzufügen eine zusätzliche Eigenschaft. In anderen Worten, ich würde gerne in der Lage, etwas zu schreiben wie:

@Override
public void serialize(TaxonomyNode value, JsonGenerator jgen, SerializerProvider provider) {
    jgen.writeStartObject();
    jgen.writeAllFields(value); //<-- The method I'd like to have
    jgen.writeObjectField("my_extra_field", "some data");
    jgen.writeEndObject();
}

oder (noch besser) irgendwie abfangen der Serialisierung vor der jgen.writeEndObject() nennen, z.B.:

@Override void beforeEndObject(....) {
    jgen.writeObjectField("my_extra_field", "some data");
}

Dachte ich, ich könnte verlängern BeanSerializer und überschreiben Sie die serialize(..) Methode, sondern es erklärt final und auch ich konnte nicht finden eine einfache Möglichkeit zum erstellen einer neuen Instanz von BeanSerializer ohne die es mit aller Art von Metadaten details praktisch duplizieren einen guten Teil von Jackson. Also ich hab aufgegeben, das zu tun.

Meine Frage ist - wie anpassen Jackson ' s Serialisierung, um zusätzliche Sachen, um die JSON-Ausgabe für bestimmte POJOs, ohne dabei zu viel boilerplate-code und die Wiederverwendung von so viel wie möglich von der Standard-Jackson-Verhalten.

InformationsquelleAutor der Frage Alex Vayda | 2013-02-05

Schreibe einen Kommentar