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.
Jackson - Entscheide, welche Felder serialisiert / deserialisiert werden
So steuern Sie, welche Felder von Jackson serialisiert / deserialisiert und welche Felder ignoriert werden.
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.