我使用Apollo Android library向GraphQL端点进行查询。 一切正常,直到我尝试将查询结果存储到Room database。
具体来说,我想将结果存储在数据库的表列中。对于复杂对象(例如由阿波罗生成的模型)执行此操作的推荐方法是使用@TypeConverter
,将复杂对象与Room本身支持的类型之间进行转换。 String
。
所以我想将阿波罗生成的对象与GraphQL响应的相应JSON字符串相互转换。我天真地尝试使用Moshi,但是此操作失败并显示以下错误:
无法获得可用的额外产品:com.example.MyQuery $ MyFragmentInterface接口没有JsonAdapter
由Apollo生成的用于处理查询片段的界面中的MyFragmentInterface
。
然后,我尝试查找Apollo库是否具有/生成了这些转换方法,例如,对于生成的模型,诸如toJson()
/ fromJson()
之类的转换方法,但是我找不到任何东西。
那么,有什么方法可以做我想要的吗?
答案 0 :(得分:1)
从Apollo 1.3.x开始,Java中提供了一个Operation.Data.toJson()
扩展函数(Kotlin)和一个相应的serialize
静态方法。
选中https://www.apollographql.com/docs/android/advanced/no-runtime/#converting-querydata-back-to-json
与之相反,Query.Data
的Json字符串,我使用类似以下的内容:
fun String?.toMyData(): MyQuery.Data? {
this ?: return null
val query = MyQuery()
val response: Response<MyQuery.Data> =
OperationResponseParser(query,
query.responseFieldMapper(),
ScalarTypeAdapters.DEFAULT)
.parse(Buffer().writeUtf8(this))
return response.data
}
答案 1 :(得分:0)
尝试Postman
并查看错误是否也出现在https://blog.getpostman.com/2019/06/18/postman-v7-2-supports-graphql/