-
[Json] gson, Jackson 컨버터의 null 필드 처리 방법개발지식 아카이브/JAVA 2020. 10. 31. 13:42
RestTemplate 의 기본 컨버터인 Jackson 컨버터의 null 필드를 처리하는 방법이 요즘 많이 쓰이는 gson 컨버터의 처리 방법과 다르다는 것을 발견하고 포스팅으로 남긴다.
dto: Stock(id=1, code=005560, name=JS전선, market=null)
가령 이런 데이터를 가진 dto 를 json 형식으로 변환하고 싶은 상황이다. 이 때 'market' 필드는 null 값을 가진다.
log.info("dto: {}", stock); # converting log.info("json by Gson converter: {}", gson.toJson(stock)); log.info("json by Jackson converter: {}", objectMapper.writeValueAsString(stock));
먼저 gson 컨버터로 변환해서 찍어보고, 그 다음 잭슨 컨버터로도 변환해서 찍어본다.
동일한 dto 를 변환했는데 결과는 다른 값이 나온다.
jackson 컨버터는 "market" 필드의 value 가 null 인것으로 처리하여 변환하는 반면, gson 컨버터는 필드값이 null 인 경우 json 파라미터로 아예 변환을 하지 않는다.
또한 Date 타입을 format 지정 없이 바로 내보낼 경우 형식이 다르다. (위의 결과 메시지 참조)
null 이 포함될 수 있는 dto 를 변환할 때 이러한 특성을 모르고 컨버터를 선택한다면 의도한 바와 다른 payload 가 나갈수 있다.
특히 RestTemplate 으로 전송시에는 내부에서 변환된 json String을 로그로 찍어주지 않기 때문에, 어떤 값이 나가는지 주의해야한다. (참고로 RestTemplate 에서 쓰이는 json 컨버터는 커스텀으로 바꿀 수 있다. default 는 jackson 컨버터지만, gson 의 컨버팅 정책이 더 적합하다면 개발자가 override 하여 변경할 수도 있다.)
'개발지식 아카이브 > JAVA' 카테고리의 다른 글
다중 Datasource 에 연결하는 Spring Batch 를 개발할 때 이슈 (0) 2022.12.27 [Java Stream] GroupingBy 를 이용한 그룹화 예시 소개 (3) 2021.02.15 [Spring Boot2] 스프링 부트2로 애플리케이션 개발: 환경설정 (0) 2020.07.11 [JAVA Collections API] 자료구조 요약: 구조/성능/용도 (3) 2019.10.28 [디자인패턴] 자바 싱글톤 Vs 스프링 싱글톤 패턴의 차이점 (1) 2019.09.28