我正在努力弄清楚如何将 CustomTypeAdapter 添加到我的 ApolloClient 中。
对于突变,我们的服务器期待 json 输入。相应的 iOS 应用正在传入一个 json 字符串。
当我传入一个字符串时,我会收到一条消息,询问我是否忘记添加自定义类型。
这是我的尝试:
构建.gradle
apollo {
useSemanticNaming = true
customTypeMapping['ISOTime'] = "java.util.Date"
customTypeMapping['JSON'] = "java.lang.JSONObject"
}
这是它被实例化的地方。
val jsonCustomTypeAdapter = object : CustomTypeAdapter<JSONObject> {
override fun decode(value: CustomTypeValue<*>): JSONObject {
return JSONObject()
}
override fun encode(value: JSONObject): CustomTypeValue<*> {
return CustomTypeValue.GraphQLJsonString(value.toString())
}
}
mApolloClient = ApolloClient
.builder()
.serverUrl(baseUrl)
.addCustomTypeAdapter(jsonCustomTypeAdapter)
.normalizedCache(cacheFactory, CacheKeyResolver.DEFAULT)
.httpCache(ApolloHttpCache(cacheStore, null))
.okHttpClient(mHttpClient)
.build()
似乎 Apollo 已经生成了一个实现 ScalarType 的 CustomType 枚举,但我不确定是否或如何使用它。
@Generated("Apollo GraphQL")
public enum CustomType implements ScalarType {
JSON {
@Override
public String typeName() {
return "Json";
}
@Override
public Class javaType() {
return Object.class;
}
},
ID {
@Override
public String typeName() {
return "ID";
}
@Override
public Class javaType() {
return String.class;
}
}
}
我已经尝试了apolloandroid github上给出的示例, 但它对我不起作用,它是在 Java 中,在我将它转换为 Kotlin 后,它无法编译。
任何提示或指导方向将不胜感激。谢谢。