首页 > 解决方案 > 反序列化时如何防止Jackson将kotlin.Boolean参数设置为false

问题描述

如果序列化的源(例如 json 对象)不包含该字段,我如何指示 Jackson 不要自动反序列化kotlin.Boolean参数?false

请参阅当前示例:

import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper

data class Test(
    var param1: String,
    var param2: Boolean
)

fun main() {
    val mapper = jacksonObjectMapper()
    // passes, param2 is set to false, why isnt exception thrown?
    val test1 = mapper.readValue("{\"param1\": \"bah\"}", Test::class.java)
    // throws com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
    val test2 = mapper.readValue("{\"param2\": true}", Test::class.java)
}

在我没有给布尔参数赋值的第一种情况下,如何让杰克逊抱怨异常?

我对此感兴趣,因为如果客户端没有为布尔参数赋值,我希望我的 API 停止并抱怨。我不希望在发生这种情况时将其简单地设置为 false。

谢谢!

标签: kotlinjacksonjson-deserialization

解决方案


最后,我自己通过阅读以下问题找到了答案jackson-module-kotlinhttps ://github.com/FasterXML/jackson-module-kotlin/issues/130

显然,kotlin 的 Boolean 是原语的别名。

并且有一个杰克逊反序列化功能,称为FAIL_ON_NULL_FOR_PRIMITIVES.

所以在我的情况下,问题是通过调用解决的objectMapper.enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)

或者对于弹簧靴,属性spring.jackson.deserialization.FAIL_ON_NULL_FOR_PRIMITIVES=true


推荐阅读