Rafael's blog

Make simple

JsonIgnore Does Not Work!!!

어느날 갑자기 Spring mvc(v3.2.2)로 구현해놓은 REST API JSON 응답값에 null 값을 가지고 있는 필드가 포함이 되는 문제가 생겼다.

분명히 도메인 객체에 @JsonSerialize(include = Inclusion.NON_NULL) 이 설정되어있고 잘 동작하던 코드였다.

한참동안 디버깅을 해보다가 도저히 원인을 찾을수가 없어 결국 내가 커밋했던 부분들을 하나씩 롤백해보았다.(다행히 프로젝트는 초기상태였고 활발하게 개발중이 아니였다)

어이없게도 aws 를 사용하기 위해 추가 했던 aws-java-sdk 1.5.6 가 문제였다.

릴리즈 노트 : http://aws.amazon.com/releasenotes/Java/7728064532185471

1
2
3
4
5
6
    <!-- aws java sdk -->
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.5.6</version>
    </dependency>

원인은 aws-java-sdk 1.5.6 버전부터 jackson 라이브러리를 2.1.2 버전을 사용한다.

프로젝트에서 이미 사용중인 jackson 라이브러리는 1.9.6 이였다.

소스에는 1.5.7 로 되어있으나 maven 라이브러리 aws-java-sdk 1.5.62.1.2 버전을 사용한다.

https://github.com/aws/aws-sdk-java/commit/6d88d2ed9c5ed80619a3397fd484fdc1f8a221de#diff-600376dffeb79835ede4a0b285078036R26

하지만 아무리 릴리즈 노트를 찾아봐도 이에 대한 설명은 없다.

당장 해결책은 aws-java-sdk 1.5.5 를 사용하도록 하였으나 추후에 aws-java-sdk 를 업데이트 해야할 경우에 문제가 될 수도 있다.

아무래도 jackson 2.1.2 라이브러리가 프로젝트에 포함되면서 기존 1.9.6 버전을 무력화 시켜버리는것 같다.

참고로 jackson 2.1.2 버전은 패키지명이 com.fasterxml 로 시작하고 1.9.6 버전은 org.codehaus 로 시작한다.