Java Jackson Null 필드 무시
1. 클래스의 Null 필드 무시
Jackson을 사용하면 클래스 수준에서 이 동작을 제어할 수 있다.
1
2
@JsonInclude(Include.NON_NULL)
public class MyDto { ... }
또는 필드 수준에서 더욱 세부적으로 동작을 제어할 수 있다.
1
2
3
4
5
6
7
8
9
public class MyDto {
@JsonInclude(Include.NON_NULL)
private String stringValue;
private int intValue;
// standard getters and setters
}
null 값이 실제로 최종 JSON 출력의 일부가 아닌지 테스트할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
@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")));
}
2. 전역적으로 Null 필드 무시
Jackson을 사용하면 ObjectMapper에서 전역적으로 이 동작을 구성 할 수 있다.
1
mapper.setSerializationInclusion(Include.NON_NULL);
이 매퍼를 통해 직렬화된 모든 클래스의 모든 null 필드는 무시된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
@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")));
}
[출처 및 참고]
This post is licensed under CC BY 4.0 by the author.