Ignorar campos nulos com Jackson

Ignorar campos nulos com Jackson

1. Visão geral

Este tutorial rápido irá cobrir como configurarJackson to ignore null fields when serializing uma classe java.

Se você quiser se aprofundar e aprender outras coisas legais que pode fazer com o Jackson 2, vá parathe main Jackson tutorial.

Leitura adicional:

Jackson - Alterar nome do campo

Jackson - Altere o nome de um campo para aderir a um formato JSON específico.

Read more

Jackson - Decida quais campos serão serializados / desserializados

Como controlar quais campos são serializados / desserializados por Jackson e quais são ignorados.

Read more

2. Ignorar campos nulos na classe

Jackson permite controlar esse comportamento em qualquer nível de classe:

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

Ou - mais granularmente - no nível do campo:

public class MyDto {

    @JsonInclude(Include.NON_NULL)
    private String stringValue;

    private int intValue;

    // standard getters and setters
}

Agora, devemos ser capazes de testar se os valores denull realmente não fazem parte da saída JSON final:

@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. Ignorar campos nulos globalmente

Jackson também permiteconfiguring this behavior globally on the ObjectMapper:

mapper.setSerializationInclusion(Include.NON_NULL);

Agora, qualquer camponull em qualquer classe serializada por meio deste mapeador será ignorado:

@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. Conclusão

Ignorar os camposnull é uma configuração de Jackson muito comum, porque muitas vezes precisamos ter um controle melhor sobre a saída JSON. Este artigo mostra como fazer isso para as classes. No entanto, existem casos de uso mais avançados, comoignoring null values when serializing a Map.

A implementação de todos esses exemplos e trechos de código pode ser encontrada emmy Github project.