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.
Jackson - Decida quais campos serão serializados / desserializados
Como controlar quais campos são serializados / desserializados por Jackson e quais são ignorados.
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.