Перейти к основному содержимому

Игнорировать нулевые поля с Джексоном

· 2 мин. чтения

1. Обзор

В этом кратком руководстве рассказывается, как настроить Jackson для игнорирования нулевых полей при сериализации класса Java.

Если мы хотим копнуть глубже и узнать другие интересные вещи, связанные с Jackson 2, мы можем перейти к основному учебнику по Джексону .

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
}

Теперь мы должны иметь возможность проверить, действительно ли нулевые значения не являются частью окончательного вывода 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);

Теперь любое нулевое поле в любом классе, сериализованном через этот преобразователь, будет игнорироваться:

@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. Вывод

Игнорирование пустых полей — такая распространенная конфигурация Джексона, потому что часто нам нужно лучше контролировать вывод JSON. В этой статье показано, как это сделать для классов. Однако есть и более продвинутые варианты использования, например игнорирование нулевых значений при сериализации Map .

Реализацию всех этих примеров и фрагментов кода можно найти в проекте Github .