gpt4 book ai didi

json - 在Javalin框架中用kotlinx.serialization替换Jackson

转载 作者:行者123 更新时间:2023-12-02 13:25:37 26 4
gpt4 key购买 nike

我正在尝试用Kotlinx.serialization替换默认的Javalin JSON序列化器Jackson。
该文档显示了如何执行with GSON serializer
不幸的是,kotlinx序列化器具有不同的函数签名,我不知道如何传递参数。
序列化是可以的,但是需要使用encodeFromString函数反序列化传递映射函数给定的类型targetClass
我被困在这里:

val kotlinx = Json { coerceInputValues = true }

JavalinJson.toJsonMapper = object : ToJsonMapper {
override fun map(obj: Any): String = kotlinx.encodeToString(obj)
}

JavalinJson.fromJsonMapper = object : FromJsonMapper {
override fun <T> map(json: String, targetClass: Class<T>): T = kotlinx.decodeFromString(json)
}
但我得到: Cannot use 'T' as reified type parameter. Use a class instead.我也尝试过:
JavalinJson.fromJsonMapper = object : FromJsonMapper {
override inline fun <reified T> map(json: String, targetClass: Class<T>): T = kotlinx.decodeFromString(json)
}
但是我得到一个警告: Override by an inline function和一个错误: Override by a function with reified type parameter
我是 kotlin的新手,我正在努力了解此覆盖的问题所在。

最佳答案

试试这个:

JavalinJson.toJsonMapper = object : ToJsonMapper {
override fun map(obj: Any): String {
val serializer = serializer(obj.javaClass)
return kotlinx.encodeToString(serializer, obj)
}
}

JavalinJson.fromJsonMapper = object : FromJsonMapper {
override fun <T> map(json: String, targetClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
val deserializer = serializer(targetClass) as KSerializer<T>
return kotlinx.decodeFromString(deserializer, json)
}
}

关于json - 在Javalin框架中用kotlinx.serialization替换Jackson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64284767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com