Realm + Retrofit 환경에서 StackOverflowException 문제

한 줄 요약 : Realm의 주장에 따르면 GSON에서 발생하는 버그이다.

2016. 05. 04.

문제점

Retrofit을 통하여 RealmObject를 POST할 때 StackOverflowException이 발생한다.

원인

일단 Realm측의 주장으로는 GSON의 버그이다.

해결 방안

GSON Converter를 버린다

무식한 방법이지만, GSON 컨버터가 아닌 다른 컨버터를 사용한다. 의외로 생각보다 복잡한 변경점은 없다.

Gradle에 다음을 추가한다.

compile 'com.squareup.retrofit2:converter-jackson'

이후 Retrofit 인스턴스 생성 부분을 다음과 같이 수정한다.

Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(JacksonConverterFactory.create())
                .build();

Side Effects

GSON의 경우, JSON 필드와 Java Object 변수에 Camelcase와 Snakecase가 섞여있으면 자동으로 매칭을 시켜준다. 하지만 일부 컨버터는 이를 지원하지 않는데, 각 컨버터에서 자체적으로 지원하는 매칭 기능을 사용해야한다.

Jackson에서의 예시는 다음과 같다.

@JsonProperty("money_amount")   
private int moneyAmount;
크리에이티브 커먼즈 라이선스

이 저작물은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2020 Do Hoerin, LYnLab