Json 在Javalin框架中用kotlinx.serialization替换Jackson
我试图用Kotlinx.serialization替换默认的JSON序列化程序Jackson 文档说明了如何执行此操作。Json 在Javalin框架中用kotlinx.serialization替换Jackson,json,kotlin,kotlinx.serialization,javalin,Json,Kotlin,Kotlinx.serialization,Javalin,我试图用Kotlinx.serialization替换默认的JSON序列化程序Jackson 文档说明了如何执行此操作。 不幸的是,kotlinx序列化程序具有不同的函数签名,我不知道如何传递参数 序列化是可以的,但是使用decodeFromString函数进行反序列化需要传递映射函数指定的类型,即targetClass 我被困在这里: val-kotlinx=Json{胁迫输入值=true} JavalinJson.toJsonMapper=object:toJsonMapper{ 覆盖趣味地
不幸的是,kotlinx序列化程序具有不同的函数签名,我不知道如何传递参数 序列化是可以的,但是使用decodeFromString函数进行反序列化需要传递映射函数指定的类型,即
targetClass
我被困在这里:
val-kotlinx=Json{胁迫输入值=true}
JavalinJson.toJsonMapper=object:toJsonMapper{
覆盖趣味地图(obj:Any):String=kotlinx.encodeToString(obj)
}
JavalinJson.fromJsonMapper=对象:fromJsonMapper{
重写有趣的映射(json:String,targetClass:Class):T=kotlinx.decodeFromString(json)
}
但是我得到:不能使用'T'作为具体化的类型参数。改用类。
我还尝试:
JavalinJson.fromJsonMapper=object:fromJsonMapper{
重写内联乐趣映射(json:String,targetClass:Class):T=kotlinx.decodeFromString(json)
}
但是我得到一个警告:由内联函数重写
,还有一个错误:由具有具体类型参数的函数重写
我是新来的kotlin
,我很难理解这种覆盖有什么问题。试试这个:
JavalinJson.toJsonMapper=object:toJsonMapper{
覆盖趣味地图(对象:任意):字符串{
val serializer=序列化程序(obj.javaClass)
返回kotlinx.encodeToString(序列化程序,obj)
}
}
JavalinJson.fromJsonMapper=对象:fromJsonMapper{
重写有趣的映射(json:String,targetClass:Class):T{
@抑制(“未选中的_CAST”)
val反序列化器=序列化器(targetClass)作为KSerializer
返回kotlinx.decodeFromString(反序列化程序,json)
}
}
非常感谢,它看起来比以前好多了。不过我总是会犯一些错误<找不到类“Any”的代码>序列化程序。问题是,serializer(targetClass)
返回一个KSerializer
而不是KSerializer
。我尝试了val反序列化器:KSerializer=serializer()
,这似乎更合适,但我再次遇到了具体化的问题。似乎,这个错误与toJsonMapper
有关。已编辑的答案,也添加了此答案。现在我得到以下错误:找不到类“GenericResponse”的序列化程序。将该类标记为@Serializable或显式提供序列化程序
,这会更好,因为GenericResponse
是我的序列化数据类。奇怪的是,这个类已经被标记为Serializable
?