首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Kmongo和kotlinx.serialization的Ktor

使用Kmongo和kotlinx.serialization的Ktor
EN

Stack Overflow用户
提问于 2020-07-23 20:07:46
回答 1查看 620关注 0票数 1

我有一个将KTor与KMongo和Kotlinx.Serialization一起使用的设置。

Kmongo部分可以工作,我可以获取并放置我的类

代码语言:javascript
复制
@Serializable
data class Task(@ContextualSerialization @SerialName("_id") val _id : Id<Task> = newId(),
                val title : String = "",
                val description : String = ""
)

存入数据库并取回它。这一切都工作得天衣无缝。

但是,当我尝试通过rest调用将该对象发送到前端时,同样是使用Kotlinx.Serialization。

代码语言:javascript
复制
get<Tasks>{ task ->
        val dao by di().instance<Dao>();
        val task = Task( title = "task1", description = "task1description");
        val foundTask = dao.read(task);
        if(foundTask != null){
            call.respond(foundTask)
        } else {
            call.respond("didn't find anything")
        }
    }

它抛出了这样的期望:

代码语言:javascript
复制
kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class WrappedObjectId. For generic classes, such as lists, please provide serializer explicitly.
    at kotlinx.serialization.PlatformUtilsKt.serializer(PlatformUtils.kt:21)
    at kotlinx.serialization.modules.SerialModuleExtensionsKt.getContextualOrDefault(SerialModuleExtensions.kt:29)
    at kotlinx.serialization.ContextSerializer.serialize(ContextSerializer.kt:29)
    at kotlinx.serialization.json.internal.StreamingJsonOutput.encodeSerializableValue(StreamingJsonOutput.kt:227)
    at kotlinx.serialization.builtins.AbstractEncoder.encodeSerializableElement(AbstractEncoder.kt:72)

现在我知道这是因为有两个kotlin.serialization json实例。KMongo上的一个不与另一个共享它的序列化程序。

因此,我将来自KMongo的序列化程序添加到来自Ktor的另一个实例中

代码语言:javascript
复制
install(ContentNegotiation) {
        json(
            json = Json(DefaultJsonConfiguration.copy(prettyPrint = true), context = kmongoSerializationModule),
            contentType = ContentType.Application.Json
        )
    }

现在我得到了

代码语言:javascript
复制
java.lang.ClassCastException: class kotlinx.serialization.json.internal.StreamingJsonOutput cannot be cast to class com.github.jershell.kbson.BsonEncoder (kotlinx.serialization.json.internal.StreamingJsonOutput and com.github.jershell.kbson.BsonEncoder are in unnamed module of loader 'app')

所以我的问题是,为什么会发生这种情况,以及如何修复它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 13:14:10

编辑:此问题已修复。

我也在KMongo github上发布了这个问题,基本上得到了一个即时的回应,这个问题已经为杰克逊解决了,但还没有为Kotlinx.serialization解决。

会有人来解决这个问题的。

编辑:已修复

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63053889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档