Jungs! Ich entwickle eine Webanwendung und entschied mich, Jackson als meinen JSON-Verarbeitungsrahmen zu verwenden.Jackson's @JsonAppend mit Standardwert
In Anfrage Daten, die ich bereit bin zu senden; sagen wir mal, die POJO wie folgt aussieht:
{
"obj1":{...},
"obj2":{...}
}
aber ich muss hinzufügen, einige Metadaten zu diesem Objekt, sagen wir mal Felder meta1
und meta
:
data class JSONEnvelope(
@JsonProperty("obj1")
val obj1: Obj1,
@JsonProperty("obj2")
val obj2: Obj2)
die wie folgt serialisiert erhalten. Ich dachte, dass @JsonAppend
mein Problem lösen würde, aber ich benutze Jackson zusammen mit Jersey, also bin ich nicht Serialisierung von Objekten manuell, so dass ich writer.withAttribute("...", ...)
nicht verwenden kann.
Ich bin bewusst, this thread, aber es gibt keine Antwort, die irgendwie meine Bedürfnisse erfüllen, weil ich denke, dass das Schreiben eines benutzerdefinierten Serialisierer ist ein bisschen Overkill dafür, auch wenn ich keinen Mechanismus haben, um den Rest zu serialisieren des ursprünglichen Objekts ". Ich würde mich für irgendwelche Ideen freuen
In diesem Zusammenhang, was meinst du mit "Metadaten"? Könnte es als einfache berechnete Eigenschaften implementiert werden, die Jackson auf die normale Weise abbildet? –
@PaulHicks Unter Metadaten verstehe ich zusätzliche Felder, da dieses Objekt das Root-Objekt ist und Remote-API zum Beispiel die angegebene JSON-Version benötigt, daher würde ich gerne das Feld '" jsonrpc ":" 2.0 "' hinzufügen. Ja, ich kann es der Klasse als Feld hinzufügen, aber ich denke, dass es nicht dorthin gehört, da diese Information nicht Teil des Status der Entität ist. Ich weiß nicht, was Sie mit berechneten Eigenschaften meinen –
Berechnete Eigenschaften sind einfach diejenigen ohne Setzer (oder wo der Setzer nichts tut); zum Beispiel, 'val jsonrpc =" 2.0 "' oder 'var time = Date(). getTime()'. Einige Eigenschaften wären für eine Umschlagklasse geeignet. Wenn Sie 'JSONEnvelope' nicht ändern, scheint JsonAppend die beste Option zu sein. Wenn Sie den ObjectWriter nach dem Aufruf von 'ObjectMapper.writerFor' nicht ändern können, müssen Sie dies vorher tun, indem Sie die' writerFor'-Methode in einem von Ihnen angegebenen ObjectMapper mit '@ Provider' überschreiben. –