Java

Gson Expose 어노테이션

태인킴 2021. 1. 5. 22:54
반응형


Android의 Retrofit2를 사용하면, gson을 이용해서, java나 kotlin을 Parsing 합니다.

저는 현재 이직을 한지, 얼마 되지 않았습니다. 그래서, 전임자 개발자 분이 작성해 놓은 소스코드를 수정 하고 있습니다. 그런데 서버로 부터, 데이터를 읽어오는 시점에서, 분명 URL도 잘 받아오고, Reponse 상태도 200 코드로 잘 받아오는 것을 디버깅을 통해서 확인 했습니다.

하지만, json 데이터가 Java 데이터로 제대로 매핑이 되어들어오지 않고, null이나, 0으로 데이터가 매핑이 되었습니다. 분명 Field 값도 잘 확인 하였고, 모두 맞았습니다.

에러도 떨어지지 않는 상황에서, 그렇게 삽질은 시작 되었습니다..."

 

 

결국 찾았습니다...

문제는, 제가 잘 사용하지 않았던 gson의 어노테이션 이였습니다. 바로, @Expose 라는 어노테이션 입니다.

전임 개발자분은 @Expose 어노테이션으로 필드를 명시적으로 나타내는 프로그래밍 스타일을 좋아 하신거 같습니다.

@Expose은 해석해 보면, [드러내다], [폭로], [보이다] 와 같은 뜻을 가지고 있습니다. 따라서, 직렬화, 역직렬화를 명시적으로 표현해 줄수 있습니다.

 

 

- @Expose (serialize = true, deserialize = true)

위와 옵션이 디폴트 옵션 입니다. 직렬화, 역직렬화 모두, 진행 한다는 뜻 입니다.

 

- @Expose (serialize = false)

위와 같은 옵션은, 직렬화만 하지 않겠다는 뜻 입니다.

 

- @Expose (deserialize = false)

위와 같은 옵션은, 역직렬화만 하지 않겠다는 뜻 입니다.

 

- @Expose (serialize = false, deserialize = false)

위와 같은 옵션은 직렬화, 역질력화 모두 하지 않겠다는 뜻 입니다. 아예 @Expose 어노테이션 자체를 사용하지 않았을 때와 같은 효과가 나타납니다.

 

 

위와 같이 @Expose 어노테이션의 효과가 나타나려면, 

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create()

위와 같이  excludeFieldsWithoutExposeAnnotation()  메소드로 Gson을 생성해야 사용 할수 있습니다. 

 

 

위 내용은, Gson github 레파지토리의 JavaDoc을 확인하시면, 알수 있습니다.

 

Expose - gson 2.8.6 javadoc

Latest version of com.google.code.gson:gson https://javadoc.io/doc/com.google.code.gson/gson Current version 2.8.6 https://javadoc.io/doc/com.google.code.gson/gson/2.8.6 package-list path (used for javadoc generation -link option) https://javadoc.io/doc/co

www.javadoc.io

반응형