gpt4 book ai didi

kotlin - 在 Kotlin 中通过传递默认值来反序列化非空类型

转载 作者:行者123 更新时间:2023-12-02 02:44:05 27 4
gpt4 key购买 nike

我想使用 Kotlin 中的自定义反序列化器来反序列化请求模型中的非空字段,如下所示:

import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.databind.DeserializationContext
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.databind.deser.std.StdDeserializer

data class MyRequest(val foo: Foo) {

data class Foo(val bar: String)

companion object {
object Deserializer : StdDeserializer<Foo>(Foo::class.java) { //This is added to Jackson Module successfully somewhere else
override fun deserialize(jsonParser: JsonParser?, context: DeserializationContext?): Foo {
val node: JsonNode = jsonParser!!.codec.readTree(jsonParser)
return if (node.isNull || node.isTextual.not()) Foo("default")
else Foo(node.asText())
}
}
}
}

但是当我发送带有空 json 正文的 post 请求时,我得到以下信息:

[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Instantiation of [simple type, class com.me.myapi.model.request.MyRequest] value failed for JSON property foo due to missing (therefore NULL) value for creator parameter foo which is a non-nullable type; nested exception is com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException

由于 Foo 是非空类型,并且我没有在 foo 的请求正文中传递任何内容,因此在反序列化之前会抛出此错误。我想知道是否有办法处理这个异常,例如给出默认值并继续反序列化步骤。

最佳答案

版本 2.10.0 jackson-databind你可以拥有:

data class MyDataClass (
@JsonSetter(nulls = Nulls.SKIP)
val defaultParameter:String="some default value",
)

此外,2.8.4 或更高版本 jackson-kotlin-module你可以这样做:

val mapper: ObjectMapper = ObjectMapper().registerModule(KotlinModule()) // "inform" Jackson about Kotlin

...

data class MyDataClass(
val defaultParameter:String="some default value",
)

关于kotlin - 在 Kotlin 中通过传递默认值来反序列化非空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63091395/

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