Net自定义转换器可支持任何数据类型, 甚至Bitmap
!!! failure "泛型和转换器关系"
1. 如果Post<Model>
, 那么NetConverter.onConvert
返回值必须为Model
2. 如果Post<Model?>
, 允许NetConverter.onConvert
返回值为null
3. 任何错误请在转换器中直接抛出异常
scopeNetLife {
val userList = Get<List<UserModel>>(Api.PATH) {
converter = GsonConverter()
}.await()
}
Net由于低耦合原则不自带任何序列化框架
=== "全局"
kotlin hl_lines="2" NetConfig.initialize(Api.HOST, this) { setConverter(SerializationConverter()) }
=== "单例"
kotlin hl_lines="3" scopeNetLife { tv.text = Get<String>(Api.PATH){ converter = SerializationConverter() }.await() }
实现JSONConverter接口快速实现JSON解析, 或直接复制以下转换器示例
序列化框架 | 示例代码 | 描述 |
---|---|---|
kotlin-serialization | SerializationConverter | Kotlin官方序列化框架 |
kotlin-serialization | ProtobufConverter | Kotlin官方序列化框架 |
gson | GsonConverter | 谷歌序列化框架 |
fastJson | FastJsonConverter | 阿里巴巴序列化框架 |
moshi | MoshiConverter | Square序列化框架 |
转换器原理非常简单, 实现NetConverter
接口返回一个对象(等于请求泛型)
???+ example "建议保留默认支持的类型" ```kotlin hl_lines="5" class CustomizeConverter: NetConverter {
override fun <R> onConvert(succeed: Type, response: Response): R? {
try {
return NetConverter.onConvert<R>(succeed, response)
} catch (e: ConvertException) {
// ... 仅自定义不支持的类型
return 任何对象 as R
}
}
}
```
转换器中可以根据错误码抛出自定义异常
??? example "转换器异常链"
kotlin // 非CancellationException/NetException及其子类的上抛ConvertException try { return request.converter().onConvert<R>(type, this) as R } catch (e: CancellationException) { throw e } catch (e: NetException) { throw e } catch (e: Throwable) { throw ConvertException(this, cause = e) }