【问题标题】:Jackson Mixins with KotlinJackson Mixins 与 Kotlin
【发布时间】:2016-07-22 03:25:05
【问题描述】:

我正在尝试使用 Jackson mixins 来忽略外部 Kotlin 数据类的属性,但到目前为止,它对我不起作用。

这是我的 SimpleModule 扩展:

class BarModule : SimpleModule() {
    override fun setupModule(context: SetupContext?) {
        context?.setMixInAnnotations(Bar::class.java, BarMixin::class.java)
    }
}

这是我的混音:

abstract class BarMixin {
    @JsonIgnore val totalValue: Double = 0.0
}

我最初尝试过@JsonIgnore val totalValue: Double,但它不接受。

这是我的课:

data class Bar(
        val a: String,
        val b: Boolean = false,
        val c: Boolean = false,
        val d: Array<Block>
) {
    val totalValue: Double by lazy {
        d.sumByDouble { it.value }
    }
}

这就是我创建映射器的方式:

private val mapper = jacksonObjectMapper().registerModule(KotlinModule()).registerModule(BarModule())

运行时崩溃并报错:无法启动活动:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:无法识别的字段“totalValue”,未标记为可忽略

【问题讨论】:

    标签: android json jackson kotlin


    【解决方案1】:

    尝试将注解放在 MixIn 的构造函数上,例如:

    abstract class BarMixin (
        @JsonIgnore val totalValue: Double = 0.0
    )
    

    (注意() 而不是{})

    【讨论】:

    • 警告:mixin 的构造函数必须与目标类的构造函数完全匹配:参数名称、顺序和类型。我在调试器中经过长时间的会话后发现了这一点,在那里我发现构造函数至少在参数数量上是匹配的。
    猜你喜欢
    • 2018-11-08
    • 2012-08-04
    • 2019-01-24
    • 2010-10-29
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多