1. 개요

이 빠른 예제은 Java 클래스 를 직렬화할 때 null 필드를 무시하도록 Jackson을 설정하는 방법을 다룰 것 입니다.

더 깊이 파고들어 Jackson 2와 관련된 다른 멋진 기능을 배우고 싶다면 기본 Jackson 예제 로 넘어갈 수 있습니다 .

2. 클래스의 Null 필드 무시

Jackson을 사용하면 클래스 수준에서 이 동작을 제어할 수 있습니다.

@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. 전역적으로 Null 필드 무시

Jackson은 또한 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 출력을 더 잘 제어해야 하는 경우가 많기 때문에 일반적인 Jackson 구성입니다. 이 기사에서는 클래스에 대해 이를 수행하는 방법을 보여줍니다. 그러나 Map 을 직렬화할 때 null 값을 무시하는 것과 같은 고급 사용 사례가 있습니다.

이러한 모든 예제와 코드 스니펫의 구현은 Github 프로젝트 에서 찾을 수 있습니다 .

Jackson footer banner