我想将Jackson配置为通过映射器而不是注释忽略未知属性,但我无法使其工作.这是一个不及格的测试.它应该会通过,因为我已经将映射器配置为忽略未知属性,但它失败了,因为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"
    }
})

推荐答案

它应该会通过,因为我已将映射器配置为忽略未知属性

您还没有以这种方式配置它.您已经设置了它,以便不会在IGNORED个属性上失败,而不是在UNKNOWN个属性上失败.因此,如果不将模型设置为ignoreunknown个属性(您在第二个测试中这样做),测试就会失败.

我认为您希望将FAIL_ON_UNKNOWN_PROPERTIES设置为False,而不是将FAIL_ON_IGNORED_PROPERTIES设置为False.

Kotlin相关问答推荐

API迁移到Spring Boot 3后,Spring Security无法工作

Scala与Kotlin中的迭代

如何在不基于数据 map 的情况下将图例添加到lets plot kotlin

为什么 <= 可以应用于 Int 和 Long,而 == 不能?

如何获取@JsonProperty 名称列表?

在 Kotlin 中,我可以在集合上有一个条件构建器元素吗?

Kotlin SAM/功能接口抛出 AbstractMethodError

从 Kotlin 调用 Java 时可以为空的规则是什么

关于 Kotlin 函数类型转换的问题

如何有效地填充 Gradle Kotlin DSL 中的额外属性?

IntelliJ 不会根据 ktlint 的期望对 Kotlin 导入进行排序

如何处理 Kotlin 中的异常?

Kotlin:sealed class cannot "contain" data classes?

Kotlin Native如何将字节数组转换为字符串?

如何在kotlin语言中将字符转换为ascii值

将字符串编码为Kotlin中的UTF-8

在 Kotlin 中声明 Byte 会出现编译时错误The integer literal does not conform to the expected type Byte

从另一个列表创建一个列表

如何在 Kotlin 中定义新的运算符?

如何判断数据是否插入到房间数据库中