Ignorer les champs nuls avec Jackson
1. Vue d'ensemble
Ce tutoriel rapide va couvrir comment configurerJackson to ignore null fields when serializing une classe java.
Si vous voulez creuser plus profondément et apprendre d'autres choses intéressantes que vous pouvez faire avec le Jackson 2, rendez-vous surthe main Jackson tutorial.
Lectures complémentaires:
Jackson - Changer le nom du champ
Jackson - Modifiez le nom d'un champ pour adhérer à un format JSON spécifique.
Jackson - Décidez quels champs doivent être sérialisés / désérialisés
Comment contrôler quels champs sont sérialisés / désérialisés par Jackson et quels champs sont ignorés.
2. Ignorer les champs nuls sur la classe
Jackson permet de contrôler ce comportement au niveau de la classe:
@JsonInclude(Include.NON_NULL)
public class MyDto { ... }
Ou - plus précisément - au niveau du terrain:
public class MyDto {
@JsonInclude(Include.NON_NULL)
private String stringValue;
private int intValue;
// standard getters and setters
}
Maintenant, nous devrions pouvoir tester que les valeurs denull ne font effectivement pas partie de la sortie JSON finale:
@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. Ignorer les champs nuls globalement
Jackson autorise égalementconfiguring this behavior globally on the ObjectMapper:
mapper.setSerializationInclusion(Include.NON_NULL);
Maintenant, tout champnull dans n'importe quelle classe sérialisée via ce mappeur va être ignoré:
@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. Conclusion
Ignorer les champsnull est une configuration Jackson si courante, car c'est souvent le cas où nous devons mieux contrôler la sortie JSON. Cet article montre comment procéder pour les classes. Il existe cependant des cas d'utilisation plus avancés, tels queignoring null values when serializing a Map.
L'implémentation de tous ces exemples et extraits de code se trouve dansmy Github project.