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 프로젝트 에서 찾을 수 있습니다 .