1. Обзор
В этом кратком руководстве будет рассказано, как настроить Джексона на игнорирование пустых полей при сериализации Java-класса.
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.
Оригинал статьи: https://www.baeldung.com/jackson-ignore-null-fields