Custom scalar types
GraphQLスキーマ言語のスカラ型で組み込み型(Int, Float, String, Boolean, ID)以外の型はCustom scalar typesとして扱われます。GitHub GraphQL API v4での例をあげると以下のクエリのavatarUrl
はURI!型
を返します。(ドキュメントはこちら)
query ShowLoginUser {
viewer {
avatarUrl
}
}
apollo-androidでのCustom scalar typesの扱い
apollo-androidでは、Custom scalar typesを「CustomType」として扱います。先ほど例にあげたavatarUrl
は、apollo-androidによってデフォルトではjava.lang.Object
にマッピングされます。この際次のような例外メッセージが表示されます。
Can't map GraphQL type: URI to: class java.lang.Object. Did you forget to add custom type adapter?
この問題の解決には、https://github.com/apollographql/apollo-android#custom-scalar-typesが参考になります。今回の場合、次の定義をモジュールレベルのbuild.gradleに定義すればOKです。
app/build.gradle
apollo {
customTypeMapping = [
"URI": "java.lang.String"
]
}
また、Date型のようなCustomTypeの場合、build.gradleへの定義に加えて、CustomTypeAdapter
を定義する必要があります。