在 Javalin 框架中用 kotlinx.serialization 替换 Jackson
Replace Jackson with kotlinx.serialization in Javalin framework
我正在尝试将默认的 Javalin JSON 序列化程序 Jackson 替换为 Kotlinx.serialization。
文档显示了如何操作 with GSON serializer。
不幸的是,kotlinx 序列化程序具有不同的函数签名,我不知道如何传递参数。
序列化没问题,但使用 decodeFromString 函数进行反序列化需要传递映射函数给定的类型 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)
}
}
我正在尝试将默认的 Javalin JSON 序列化程序 Jackson 替换为 Kotlinx.serialization。
文档显示了如何操作 with GSON serializer。
不幸的是,kotlinx 序列化程序具有不同的函数签名,我不知道如何传递参数。
序列化没问题,但使用 decodeFromString 函数进行反序列化需要传递映射函数给定的类型 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)
}
}