kotlin 为什么将DeserializationFeature. FAIL_ON_IGNORED_PROPERTIES设置为false不能在jacksonObjectMapper上工作?

mqkwyuun  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(162)

我想配置Jackson通过Map器而不是注解来忽略未知属性,但我无法让它工作。这是个失败的测试它应该通过,因为我已经配置了Map器忽略未知属性,但它失败了,因为json包含未知属性(make)。第二个测试使用注解通过。

package paul.demo.training

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.databind.DeserializationFeature
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import io.kotest.core.spec.style.FunSpec
import io.kotest.matchers.shouldBe


class JsonIgnore: FunSpec({

    test("Mapper should ignore unknown properties - mapper") {

        data class Car(val colour : String)
        val json = """
            { "colour" : "Red",
              "make" : "Ford"
            }
        """.trimIndent()

        val mapper = jacksonObjectMapper().configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false)

        val car = mapper.readValue(json,Car::class.java)

        car.colour shouldBe "Red"
    }

    test("Mapper should ignore unknown properties - annotation") {
        @JsonIgnoreProperties(ignoreUnknown = true)
        data class Car(val colour : String)
        val json = """
            { "colour" : "Red",
              "make" : "Ford"
            }
        """.trimIndent()

        val mapper = jacksonObjectMapper().configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false)

        val car = mapper.readValue(json,Car::class.java)

        car.colour shouldBe "Red"
    }
})
n9vozmp4

n9vozmp41#

它应该会通过,因为我已经将Map器配置为忽略未知属性
您还没有这样配置它。您已将其设置为不会在 IGNORED 属性上失败,而不会在 UNKNOWN 属性上失败。因此,如果不将模型设置为 ignore**unknown 属性(在第二个测试中就是这样做的),测试应该失败。
我认为你想设置FAIL_ON_UNKNOWN_PROPERTIES,而不是FAIL_ON_IGNORED_PROPERTIES为false。

相关问题