Игнорировать пустые поля с Джексоном
1. обзор
Это краткое руководство расскажет, как настроитьJackson to ignore null fields when serializing java-класс.
Если вы хотите копнуть глубже и узнать о других интересных вещах, которые можно сделать с помощью Jackson 2, переходите кthe main Jackson tutorial.
Дальнейшее чтение:
Джексон - Изменить имя поля
Джексон - измените имя поля, чтобы оно соответствовало определенному формату JSON.
Джексон - решите, какие поля будут сериализованы / десериализованы
Как контролировать, какие поля сериализуются / десериализуются Джексоном, а какие игнорируются.
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. Игнорировать пустые поля глобально
Джексон также позволяетconfiguring this behavior globally on the 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. В этой статье показано, как это сделать для классов. Однако есть более сложные варианты использования, такие какignoring null values when serializing a Map.
Реализацию всех этих примеров и фрагментов кода можно найти вmy Github project.