Автор оригинала: Eugen Paraschiv.
1. Обзор
Этот краткий учебник будет посвящен тому, как настроить Jackson для игнорирования нулевых полей при сериализации класса java.
Если мы хотим копнуть глубже и узнать другие интересные вещи, связанные с Jackson 2, мы можем перейти к основному учебнику Джексона .
Дальнейшее чтение:
Jackson – Изменить имя поля
Джексон – Решите, Какие Поля Будут Сериализованы/Десериализованы
2. Игнорируйте нулевые поля в классе
Джексон позволяет нам контролировать это поведение на любом уровне класса:
@JsonInclude(Include.NON_NULL)
public class MyDto { ... }Или с большей детализацией на полевом уровне:
public class MyDto {
@JsonInclude(Include.NON_NULL)
private String stringValue;
private int intValue;
// standard getters and setters
}Теперь мы должны быть в состоянии проверить, что значения null действительно не являются частью конечного вывода JSON:
@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. Игнорируйте Нулевые Поля Глобально
Джексон также позволяет нам настроить это поведение глобально на ObjectMapper :
mapper.setSerializationInclusion(Include.NON_NULL);
Теперь любое поле null в любом классе, сериализованном через этот картограф, будет проигнорировано:
@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. Заключение
Игнорирование полей null – это такая распространенная конфигурация Джексона, потому что часто бывает так, что нам нужно лучше контролировать выходные данные JSON. В этой статье показано, как это сделать для классов. Однако существуют и более продвинутые варианты использования, такие как игнорирование нулевых значений при сериализации карты .
Реализацию всех этих примеров и фрагментов кода можно найти в проекте Github .