gpt4 book ai didi

kotlin - 如何使用 Kotlin 在 Jackson 中使用默认值和所需值控制空反序列化?

转载 作者:行者123 更新时间:2023-12-02 13:14:08 24 4
gpt4 key购买 nike

使用 jackson 2.9.6

我有以下数据类定义:

data class SomeDTO @JsonCreator internal constructor
(
@get:JsonProperty(value = "first-property", required = true)
@param:JsonProperty(value = "first-property", required = true)
val firstProperty: Long?,

@get:JsonProperty(value = "second-property")
@param:JsonProperty(value = "second-property")
val secondProperty: Int = 1234

@get:JsonProperty("third-property", required = true)
@param:JsonProperty("third-property", required = true)
val thirdProperty: Int
)

我对反序列化为 SomeDTO 的 JSON 的期望是什么
  • 如果 firstProperty丢失,它应该抛出异常。
  • 如果 firstProperty为空,它应该分配空,因为它可以为空。
  • 如果 secondProperty缺少或为空,它应该分配默认值 1234
  • 如果 thirdProperty丢失或为空,它应该抛出异常。

  • 基本上,我可以控制哪些值可以反序列化并转化为什么。

    我的经历:

    如果不使用 KotlinModule,则 (1)、(2) 和 (4) 有效,但 (3) 失败并显示:

    com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot map null into type int (set DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES to 'false' to allow)



    如果使用 KotlinModule,则 (2)、(3) 和 (4) 有效,但 (1) 失败。

    ObjectMapper 配置的主要部分:
    disable(
    MapperFeature.AUTO_DETECT_CREATORS,
    MapperFeature.AUTO_DETECT_FIELDS,
    MapperFeature.AUTO_DETECT_GETTERS,
    MapperFeature.AUTO_DETECT_IS_GETTERS
    )
    disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)

    registerModule(ParanamerModule())
    registerModule(KotlinModule()) // Might be registered or not

    disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
    disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
    enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)

    我认为使用 KotlinModule 更容易,但我不知道如何告诉它在 JSON 中缺少属性时不要将空值自动分配给可空字段

    最佳答案

    将 Kotlin 模块更新到版本 2.9.7 会在 firstProperty 时产生异常。不见了。我已经反复测试了它,在 2.9.6 和 2.9.7 之间来回切换,代码和配置是从 OP 复制的。

    2.9.7 中的错误修复与 OP 中描述的意外行为相匹配。

    Fixes #168 where JsonProperty(required=true) was being ignored and overridden by nullability check



    https://github.com/FasterXML/jackson-module-kotlin/issues/168

    关于kotlin - 如何使用 Kotlin 在 Jackson 中使用默认值和所需值控制空反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52627957/

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