Итак, у меня есть этот класс:
@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
Как использовать дженерики прямо с сериализацией?