Retrofitを使ってGitHubのAPIにアクセスするプログラムを書いています。GitHub APIから以下のようなデータを受け取り、avatar_url
という値をスネークケースからキャメルケースに変換したいと考えていますが、値が受け取れずにnullになってしまいます。Moshiでスネークケースからキャメルケースに変換する方法をご教示いただけないでしょうか。JsonのパーサーにはMoshiを使用しています。
data class GitHubUser( val name: String, val id: String, @Json(name = "avatar_url") val avatarUrl: String )
以下のようにスネークケースで書いた場合には上手く値を受け取ることができています。
data class GitHubUser( val name: String, val id: String, val avatar_url: String )
使用しているライブラリーのバージョンは以下の通りです。
dependencies { // Coroutine implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:${CoroutineVersion}" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:${CoroutineVersion}" // Coroutine Adapter implementation "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:${CoroutineAdapterVersion}" // Retrofit2 implementation "com.squareup.retrofit2:retrofit:${RetrofitVersion}" implementation "com.squareup.retrofit2:converter-moshi:${RetrofitVersion}" }
ext { CoroutineVersion = '1.1.1' CoroutineAdapterVersion = '0.9.2' RetrofitVersion = '2.5.0' }
関連箇所のコードは以下の通りです。
interface GitHubApi { companion object { val instance: GitHubApi = Retrofit.Builder() .baseUrl(BuildConfig.BASE_URL) .addConverterFactory(MoshiConverterFactory.create()) .addCallAdapterFactory(CoroutineCallAdapterFactory()) .build() .create(GitHubApi::class.java) } @GET("users/{user_name}") fun fetchUserAsync(@Path("user_name") userName: String): Deferred<GitHubUser> }
private fun accessApi() { GlobalScope.launch(Dispatchers.Main) { val request = GitHubApi.instance.fetchUserAsync("okuzawats") try { val response = request.await() // avatar_urlがnullになる } catch (e: Throwable) { Timber.e(e) } } }
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。