kotlin - 带可选 Gson 转换器的改造客户端
问题描述
我有一些 API 客户端,我想传入一个可选的 Json 解码器。例如,某些 API 以以下方式返回 JSON:
{
"title": "Some Name",
"more": "data"
}
和其他人以下列方式返回数据:
{
"key": {
"title": "Some Name",
"more": "data"
}
}
我想做的是传入一个可选的 gson 转换器。
fun createService(): ApiInterface {
return buildService()
}
fun <T>createService(targetClass: Class<T>, key: String): ApiInterface {
targetClass: Class<T>
key: String
var gson: Gson = GsonBuilder()
.registerTypeAdapter(targetClass, RestDeserializer(targetClass, key))
.create()
return buildService(gson)
}
fun buildService(gson: Gson?): ApiInterface {
// build my builder
val retrofit = Retrofit.Builder()
.baseUrl(API_BASE_URL)
/// I WANT TO PASS gson here IF it exists..
.addConverterFactory(GsonConverterFactory.create(gson??)) <------- Pass in gson ONLY if it's not null??
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.addCallAdapterFactory(NetworkResponseAdapterFactory())
.client(client.build())
.build()
return retrofit.create(ApiInterface::class.java)
}
如果我在 gson 为 null 时传入它,我会收到错误
仅当它不为空时,我如何才能传入 gson?
解决方案
我不确定我是否正确理解了您的问题。如果我这样做,你只需要一个空检查。
fun buildService(gson: Gson?): ApiInterface {
val retrofitBuilder = Retrofit.Builder()
.baseUrl(API_BASE_URL)
if(gson != null) {
retrofitBuilder.addConverterFactory(GsonConverterFactory.create(gson))
}
val retrofit = retrofitBuilder.
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.createAsync())
.addCallAdapterFactory(NetworkResponseAdapterFactory())
.client(client.build())
.build()
return retrofit.create(ApiInterface::class.java)
}
推荐阅读
- angular - 更新异步管道中使用的 observable 的一部分
- laravel - 如何从自定义 Laravel UserProvider 返回身份验证错误?
- ruby-on-rails - Rails:创建新记录时更新连接表自定义属性
- spring-boot - Ouath2 + jwt 和弹簧靴
- c# - 模糊匹配两个 csv 文件的最快方法
- jenkins - 如何解决 Jenkins 上的 Gruntfile.js“意外令牌”错误?
- binding - hyperjaxb 绑定自定义排除包
- python-3.x - Python - 安排关闭程序
- sql - SQL 搜索缺失的记录,然后插入值
- vba - 访问 365 vba 问题,将特定 Outlook 365 电子邮件消息移动到子文件夹