android - 带有通用消息包装器的 kotlinx 序列化
问题描述
所以我有这个类:
@Serializable
sealed class Message<out T>{
@Serializable
class Success<out T>(val value: T) : Message<T>()
@Serializable
class Error<out T>(val errorMessage: String) : Message<T>()
}
我想将其用于从服务器发送到客户端的每条消息。我已经不得不更改以下函数,因为我不知道如何将序列化与泛型一起使用
post("create") {
val userName = call.receive<String>()
if (userName.isBlank()) {
call.respond(Message.Error<User>("Specify a username"))
} else {
call.respond(Message.Success(User(userName)))
}
}
至
post("create") {
val userName = call.receive<String>()
if (userName.isBlank()) {
val serializer = Message.Error.serializer(User.serializer())
val response = Message.Error<User>("Specify a username")
val responseString = stringify(serializer, response)
call.respond(responseString)
} else {
val serializer = Message.Success.serializer(User.serializer())
val response = Message.Success(User(userName))
val responseString = stringify(serializer, response)
call.respond(responseString)
}
}
但是现在我的客户抛出了这个错误:java.lang.RuntimeException: Failed to invoke private com.kvw.letsgo.common.Message() with no args
如何在序列化中正确使用泛型?
解决方案
推荐阅读
- android - 返回类型'列表
' 不是一个 'FutureOr - >>',根据闭包的上下文 Flutter 的要求
- python - xlwings 只读模式,打开文件
- cobol - Enterprise COBOL 是否支持 Free Format 源代码
- csv - 使用 OMNet++ 生成数据集
- r - 如何使用 ggplot 在条形图中重新排列/重新排序 Y 轴值
- node.js - HTTP 选项方法 url 与指定的端点 url 不同
- plugins - 在 Ckeditor5 上的跟踪更改和评论插件上禁用适配器集成模式
- java - 如何在 MyBatis 中使用 foreach 功能
- algorithm - 如何实现 Karatsuba 乘法,使其可以处理奇数和不等长的 X 和 Y?
- arrays - 我需要在 json 数组中获取嵌套元素