LYnLab

소개블로그취미로그

Realm + Retrofit 환경에서 StackOverflowException 문제

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

2016-05-04#프로그래밍

💡 이 글은 작성된지 1년 이상 지났습니다. 정보글의 경우 최신 내용이 아닐 수 있음에 유의해주세요.

문제점

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;

관련된 글

Rails와 GitHub Actions에 커버리지 레포트를 달아보자

이 블로그의 CMS이기도 한 Shiori를 대폭 리팩토링하면서 테스트가 얼마나 잘 작성되어있는지 궁금해졌습니다.

Rails Global ID로 전역 객체 식별하기

Global ID는 Rails의 모든 객체를 식별할 수 있는 URI(Uniform Resource Identifier)입니다.

Ruby on WebAssembly: 살짝 맛보기

Ruby 3.2에 추가된 WebAssembly 지원을 간단하게 테스트해봅시다.

작성한 댓글은 giscus를 통해 GitHub Discussion에 저장됩니다.

크리에이티브 커먼즈 라이선스크리에이티브 커먼즈 저작자표시크리에이티브 커먼즈 동일조건변경허락

본 사이트의 저작물은 별도의 언급이 없는 한 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2024 Hoerin Doh, All rights reserved.

LYnLab 로고About MeGitHubTwitterInstagram