854 Stimmen

Wie kann man Jackson anweisen, ein Feld bei der Serialisierung zu ignorieren, wenn sein Wert null ist?

Wie kann Jackson so konfiguriert werden, dass der Wert eines Feldes bei der Serialisierung ignoriert wird, wenn der Wert dieses Feldes null ist?

Zum Beispiel:

public class SomeClass {
   // what jackson annotation causes jackson to skip over this value if it is null but will 
   // serialize it otherwise 
   private String someValue; 
}

1314voto

Programmer Bruce Punkte 61767

Um die Serialisierung von Eigenschaften mit Nullwerten mit Jackson >2.0 zu unterdrücken, können Sie konfigurieren Sie die ObjectMapper direkt oder verwenden Sie die @JsonInclude Bemerkung:

mapper.setSerializationInclusion(Include.NON_NULL);

oder:

@JsonInclude(Include.NON_NULL)
class Foo
{
  String bar;
}

Alternativ können Sie auch Folgendes verwenden @JsonInclude in einem Getter, damit das Attribut angezeigt wird, wenn der Wert nicht null ist.

Ein ausführlicheres Beispiel finden Sie in meine Antwort a Wie kann man verhindern, dass Null-Werte innerhalb einer Map und Null-Felder innerhalb einer Bean durch Jackson serialisiert werden? .

188voto

davnicwil Punkte 24441

Um die anderen Antworten zu ergänzen: Wenn Sie das Auslassen von Nullwerten für jedes einzelne Feld kontrollieren müssen, sollten Sie das betreffende Feld mit Anmerkungen versehen (oder alternativ den "Getter" des Feldes mit Anmerkungen versehen).

Beispiel - nur hier fieldOne wird in der JSON-Datei weggelassen, wenn sie null ist. fieldTwo wird immer im JSON enthalten sein, unabhängig davon, ob es null ist.

public class Foo {

    @JsonInclude(JsonInclude.Include.NON_NULL) 
    private String fieldOne;

    private String fieldTwo;
}

Um alle Nullwerte in der Klasse standardmäßig auszulassen, kommentieren Sie die Klasse. Diese Vorgabe kann bei Bedarf durch feld- und getterbezogene Anmerkungen außer Kraft gesetzt werden.

Beispiel - aquí fieldOne et fieldTwo werden aus dem JSON ausgelassen, wenn sie null sind, da dies der Standardwert ist, der durch die Klassenanmerkung festgelegt wird. fieldThree hat jedoch Vorrang vor der Standardeinstellung und wird aufgrund des Vermerks auf dem Feld immer berücksichtigt.

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Foo {

    private String fieldOne;

    private String fieldTwo;

    @JsonInclude(JsonInclude.Include.ALWAYS)
    private String fieldThree;
}

UPDATE

Die obigen Angaben sind für Jackson 2 . Für frühere Versionen von Jackson, die Sie verwenden müssen:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) 

anstelle von

@JsonInclude(JsonInclude.Include.NON_NULL)

Wenn diese Aktualisierung nützlich ist, dann bewerten Sie bitte die Antwort von ZiglioUK weiter unten, die auf die neuere Jackson 2 Anmerkung hingewiesen hat, lange bevor ich meine Antwort aktualisiert habe, um sie zu verwenden!

140voto

WTK Punkte 15875

Bei Jackson > 1.9.11 und < 2.x verwenden Sie @JsonSerialize Anmerkung, um dies zu tun:

@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)

67voto

ZiglioUK Punkte 2565

In Jackson 2.x, verwenden Sie:

@JsonInclude(JsonInclude.Include.NON_NULL)

47voto

Eren Yilmaz Punkte 1042

Sie können die folgende Mapperkonfiguration verwenden:

mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);

Seit der Version 2.5 können Sie sie benutzen:

mapper.setSerializationInclusion(Include.NON_NULL);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X