Jackson Mixins 与 Kotlin

Posted

技术标签:

【中文标题】Jackson Mixins 与 Kotlin【英文标题】:Jackson Mixins with 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”,未标记为可忽略

【问题讨论】:

【参考方案1】:

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

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

(注意() 而不是

【讨论】:

警告:mixin 的构造函数必须与目标类的构造函数完全匹配:参数名称、顺序和类型。我在调试器中经过长时间的会话后发现了这一点,在那里我发现构造函数至少在参数数量上是匹配的。

以上是关于Jackson Mixins 与 Kotlin的主要内容,如果未能解决你的问题,请参考以下文章

python入行030(mixins机制派生与方法重用)

Mixins多态绑定方法与非绑定方法

SASS 和 Bootstrap - mixins 与 @extend

SASS 和 Bootstrap - mixins 与 @extend

Spring Boot - 自定义 JSON 序列化 [重复]

九vue mixins 的用法