Ignoriere Nullfelder mit Jackson

Ignoriere Nullfelder mit Jackson

1. Überblick

In diesem kurzen Tutorial erfahren Sie, wie SieJackson to ignore null fields when serializing als Java-Klasse einrichten.

Wenn Sie tiefer graben und andere coole Dinge lernen möchten, die Sie mit dem Jackson 2 machen können, gehen Sie zuthe main Jackson tutorial.

Weitere Lektüre:

Jackson - Ändern Sie den Namen des Feldes

Jackson - Ändern Sie den Namen eines Felds, um ein bestimmtes JSON-Format einzuhalten.

Read more

Jackson - Entscheide, welche Felder serialisiert / deserialisiert werden

So steuern Sie, welche Felder von Jackson serialisiert / deserialisiert und welche Felder ignoriert werden.

Read more

2. Nullfelder in der Klasse ignorieren

Jackson erlaubt es, dieses Verhalten entweder auf Klassenebene zu steuern:

@JsonInclude(Include.NON_NULL)
public class MyDto { ... }

Oder - genauer gesagt - auf Feldebene:

public class MyDto {

    @JsonInclude(Include.NON_NULL)
    private String stringValue;

    private int intValue;

    // standard getters and setters
}

Jetzt sollten wir testen können, ob die Werte vonnulltatsächlich nicht Teil der endgültigen JSON-Ausgabe sind:

@Test
public void givenNullsIgnoredOnClass_whenWritingObjectWithNullField_thenIgnored()
  throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    MyDto dtoObject = new MyDto();

    String dtoAsString = mapper.writeValueAsString(dtoObject);

    assertThat(dtoAsString, containsString("intValue"));
    assertThat(dtoAsString, not(containsString("stringValue")));
}

3. Nullfelder global ignorieren

Jackson erlaubt auchconfiguring this behavior globally on the ObjectMapper:

mapper.setSerializationInclusion(Include.NON_NULL);

Nun wird jedesnull Feld in jeder Klasse, die über diesen Mapper Serialisiert wurde, ignoriert:

@Test
public void givenNullsIgnoredGlobally_whenWritingObjectWithNullField_thenIgnored()
  throws JsonProcessingException {
    ObjectMapper mapper = new ObjectMapper();
    mapper.setSerializationInclusion(Include.NON_NULL);
    MyDto dtoObject = new MyDto();

    String dtoAsString = mapper.writeValueAsString(dtoObject);

    assertThat(dtoAsString, containsString("intValue"));
    assertThat(dtoAsString, containsString("booleanValue"));
    assertThat(dtoAsString, not(containsString("stringValue")));
}

4. Fazit

Das Ignorieren vonnull-Feldern ist eine so häufige Jackson-Konfiguration, da wir häufig eine bessere Kontrolle über die JSON-Ausgabe benötigen. Dieser Artikel zeigt, wie das für Klassen getan wird. Es gibt jedoch fortgeschrittenere Anwendungsfälle wieignoring null values when serializing a Map.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie inmy Github project.