Jackson: Was passiert, wenn eine Immobilie fehlt?
Was passiert, wenn ich kommentieren Konstruktor-parameter mit @JsonProperty
aber das Json nicht angeben, der dieser Eigenschaft. Welchen Wert hat der Konstruktor bekommen?
Wie kann ich unterscheiden zwischen einer Eigenschaft mit einem null-Wert im Vergleich zu einer Immobilie, die nicht in der JSON?
InformationsquelleAutor der Frage Gili | 2011-11-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zusammenfassen ausgezeichnete Antworten von Programmierer Bruce und StaxMan:
Fehlenden Eigenschaften wird durch den Konstruktor wird ein Standardwert zugewiesen wie definiert durch Java.
Können Sie die setter-Methoden zu unterscheiden zwischen Eigenschaften, die implizit oder explizit festgelegt werden. Setter-Methoden werden nur aufgerufen, für Eigenschaften mit eindeutigen Werten. Setter-Methoden kann verfolgen, ob eine Eigenschaft wurde ausdrücklich festgelegt, über ein boolean-flag (z.B.
isValueSet
).InformationsquelleAutor der Antwort Gili
Für Fragen wie diese, ich möchte nur schreiben, ein Beispiel-Programm und sehen, was passiert.
Folgenden ist so ein Beispiel-Programm.
Das Ergebnis ist, dass der Konstruktor übergeben wird der Standardwert für den Datentyp.
Ein einfacher Ansatz wäre, zu überprüfen, ob ein default-Wert post Deserialisierung Verarbeitung, da, wenn das element in der JSON-hatte aber einen null-Wert, dann wird der null-Wert verwendet werden würde, um zu ersetzen Sie alle Standard-Wert erhält, wird die entsprechende Java-Bereich. Zum Beispiel:
Ein weiterer Ansatz wäre die Implementierung einer benutzerdefinierten deserializer, der überprüft, ob die benötigten JSON-Elemente. Und noch ein weiterer Ansatz wäre es, melden Sie sich ein enhancement-request mit der Jackson-Projekt an http://jira.codehaus.org/browse/JACKSON
InformationsquelleAutor der Antwort Programmer Bruce
Zusätzlich zu Konstruktor Verhalten erklärt in @Programmer_Bruce Antwort, eine Möglichkeit zur Differenzierung zwischen null-Wert und den fehlenden Wert zu definieren, der eine setter: setter-wird nur aufgerufen, die explizit mit dem Wert null.
Benutzerdefinierte setter können dann festlegen, dass eine private boolean flag ("isValueSet" oder was auch immer), wenn Sie wollen, zu verfolgen-Werte gesetzt.
Setter haben Vorrang vor den Feldern, in den Fall, dass beide Feld-und setter vorhanden sind, so können Sie die "override" - Verhalten auf diese Weise auch.
InformationsquelleAutor der Antwort StaxMan
Ich denke mit etwas in der Art von eine Option Klasse, wo Nichts, das Objekt würde mir sagen, wenn es solch einen Wert hat oder nicht. Hat jemand schon sowas gemacht mit Jackson (in Java, nicht Scala, et al)?
InformationsquelleAutor der Antwort Roberto
(Meine Antwort kann sinnvoll sein, einige Menschen finden diesen thread über google, auch wenn es nicht zu beantworten, OPs Frage)
Wenn Sie sind den Umgang mit primitiven Typen, die omittable, und Sie nicht möchten, verwenden Sie eine Set wie beschrieben in den anderen Antworten (zum Beispiel, wenn Sie wollen, dass Ihr Gebiet endgültig), können Sie im Feld Objekte:
das funktioniert nicht, wenn die JSON-enthält tatsächlich
null
aber es kann ausreichend sein, wenn Sie wissen, es enthält nur primitive oder fehlenInformationsquelleAutor der Antwort Felk
eine weitere option ist überprüfen das Objekt nach der Deserialisierung entweder manuell oder über Rahmenwerke wie java bean validation, oder, wenn Sie der Frühling, der Frühling-Validierung unterstützen.
InformationsquelleAutor der Antwort abdel