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

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

1. обзор

Это краткое руководство расскажет, как настроитьJackson to ignore null fields when serializing java-класс.

Если вы хотите копнуть глубже и узнать о других интересных вещах, которые можно сделать с помощью Jackson 2, переходите кthe main Jackson tutorial.

Дальнейшее чтение:

Джексон - Изменить имя поля

Джексон - измените имя поля, чтобы оно соответствовало определенному формату JSON.

Read more

Джексон - решите, какие поля будут сериализованы / десериализованы

Как контролировать, какие поля сериализуются / десериализуются Джексоном, а какие игнорируются.

Read more

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.