Ignora Null Fields con Jackson

1. Panoramica

Questo breve tutorial spiegherà come configurare Jackson per ignorare i campi nulli durante la serializzazione di una classe java.

Se vuoi approfondire e imparare altre cose interessanti che puoi fare con Jackson 2, vai al tutorial principale di Jackson.

2. Ignora i campi nulli sulla classe

Jackson consente di controllare questo comportamento a livello di classe:

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

Oppure, in modo più granulare, a livello di campo:

public class MyDto { @JsonInclude(Include.NON_NULL) private String stringValue; private int intValue; // standard getters and setters }

Ora, dovremmo essere in grado di verificare che i valori nulli non facciano effettivamente parte dell'output 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. Ignora i campi nulli a livello globale

Jackson consente anche di configurare questo comportamento a livello globale su ObjectMapper :

mapper.setSerializationInclusion(Include.NON_NULL);

Ora qualsiasi campo null in qualsiasi classe serializzata tramite questo mappatore verrà ignorato:

@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. Conclusione

Ignorare i campi nulli è una configurazione così comune di Jackson perché spesso è necessario avere un controllo migliore sull'output JSON. Questo articolo mostra come farlo per le classi. Esistono tuttavia casi d'uso più avanzati, come ignorare i valori null durante la serializzazione di una mappa.

L'implementazione di tutti questi esempi e frammenti di codice può essere trovata nel mio progetto Github.