Ich habe Probleme beim Ausschließen von Null/Empty-Eigenschaften, wenn ich meine ObjectNode wieder in eine Zeichenfolge serialisieren. Ich googelte herum und alle Referenzen über JsonInclude.Include.NON_NULL betreffen Serialisierung und Deserialisierung von einem Bean, kein ObjectNode - Es scheint, dass sich die Serialisierung anders verhält als ein "beliebiger" ObjectNode anstelle eines vordefinierten Bean.Jackson ObjectNode: wie NULL bei Serialisierung nicht enthalten
Mein Ziel ist es, die Ausgabe haben = { "name": "myName"}, nicht { "name": "myName", "nu": null, "empt": ""}
import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.databind.node.ObjectNode
import com.fasterxml.jackson.databind.ObjectMapper
val jsonInputStr = """{"name": "myName"}"""
val newObjMapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
val json = newObjMapper.readTree(jsonInputStr).asInstanceOf[ObjectNode]
json.put("nu", null.asInstanceOf[String])
json.put("empt", "")
val str = newObjMapper.writeValueAsBytes(json)
println(s"OUTPUT = ${new String(str)}")
druckt: OUTPUT = { "name": "myName", "nu": null, "empt": ""}
Eine große verschachtelte Karte (mein tatsächliches Json-Objekt ist sehr verschachtelt mit vielen verschiedenen Typen)? Jawohl. Hatte wirklich gehofft, dass diese Funktion auf einem ObjectNode oder JsonNode funktionieren könnte und nur meine Syntax ist falsch. Sie haben es bereits eindeutig für Beans hinzugefügt, und der objectMapper durchquert den gesamten Baum Knoten für Knoten, sollte für sie einfach das Feature bereitgestellt haben. ... es scheint, dass nicht viele Leute den veränderbaren ObjectNode verwenden. –
Ich habe meine Antwort bearbeitet eine Lösung zur Verfügung stellen, die Sie Ihre Domain-Logik auf dem Knoten (wenn auch Art der hässlichen Serialisierung) tun können. –