Ich habe eine Java-Klasse mit einem optionalen Feld. Ich bin die Klasse zu JSON mit Jackson 2.8.3 (aufgerufen von Spring Web 4.3.3).Wie überspringe ich optionale.leere Felder während der Jackson-Serialisierung?
Ich hoffe, den Serializer das Feld zu überspringen, wenn das Optional leer ist, und die enthaltene Zeichenfolge serialisieren, wenn es vorhanden ist. Ein Beispiel für das Ergebnis, denn ich bin auf der Suche mit einer Liste von zwei Objekten:
[
{
"id": 1,
"foo": "bar"
},
{
"id": 2,
}
]
Hier die foo Optional ist leer für das Objekt mit der ID 2.
Statt dessen, was ich bekommen ist:
[
{
"id": 1,
"foo": {
"present": true
}
},
{
"id": 2,
"foo": {
"present": false
}
}
]
Dies ist das Ergebnis, auch wenn ich das „bar“ Feld in der Klasse wie
@JsonInclude(JsonInclude.Include.NON_ABSENT)
public Optional<String> getFoo() { ...
jede wa gibt es annotieren y Kann ich ein Ergebnis wie die erste Liste mit den Jackson-Anmerkungen oder einem benutzerdefinierten Serializer erzielen?
Die Verwendung von 'Optional' als Feld einer Bean ist im Allgemeinen eine schlechte Idee. – biziclop
Warum wird das als problematisch angesehen? –
Es wurde nicht für diese Art der Verwendung entwickelt. Es ist ein sehr subtiler semantischer Unterschied, aber im Falle eines Feldes wird "null" nur als ein anderer Wert betrachtet. Wenn Sie eine Methode in der API einer Bibliothek entwerfen, sollten Sie jedoch betonen, dass sie möglicherweise keinen Wert zurückgibt und daher "Optional" verwendet. Sehen Sie mehr [hier] (http://stackoverflow.com/questions/26327957/should-java-8-getters-return-optional-type/26328555#26328555) – biziclop