2016-04-02 36 views
2

Ich versuche Jackson Mixins zu verwenden, um eine Eigenschaft einer externen Kotlin Datenklasse zu ignorieren, aber bis jetzt funktioniert es nicht für mich.Jackson Mixins mit Kotlin

Das ist meine SimpleModule Erweiterung:

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

Und das ist mein mixin:

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

Ich versuchte ursprünglich @JsonIgnore val totalvalue: Double, aber es würde das nicht akzeptieren.

Das ist meine Klasse:

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 } 
    } 
} 

Dies ist, wie ich meine Mapper erstellen:

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

Beim Laufen, es mit dem Fehler abstürzt: Kann Aktivität starten: com.fasterxml.jackson .databind.exc.UnrecognizedPropertyException: Unbekanntes Feld "totalValue", nicht als ignorierbar markiert

Antwort

1

Versuchen Sie, die Annotation auf den Konstruktor Ihres MixIns zu setzen, wie zum Beispiel:

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

(beachte die () anstelle von {})