Рубрики
Без рубрики

Игнорировать нулевые поля с помощью Jackson

Игнорируйте нулевые поля с помощью Jackson 2 – либо глобально, либо по классу, либо даже по полю.

Автор оригинала: 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 .