Jackson注释通过Kotlin Reflect不可见



由于某些原因,Kotlin Reflect确实在成员属性上看到了我的自定义注释,但没有看到Jackson注释。尽管Jackson注释是由Jackson自己检测和使用的。最小代码段(在REPL中运行,因此为Line_5$A类名(:

annotation class A

class C {
@A
@com.fasterxml.jackson.annotation.JsonProperty
var x: Int = 0
}

C::class.memberProperties.forEach { println(it.annotations.map{it.annotationClass}) }

输出:[class Line_5$A]

预期:[class Line_5$A, class com.fasterxml.jackson.annotation.JsonProperty]

我怎么能在这里访问Jackson注释?

Ok,发现Jackson注释附加到Java字段,而不是Kotlin属性。因此,此解决方法有效:

println(C::class.memberProperties.first().javaField!!.declaredAnnotations.get(0).annotationClass)

输出:class com.fasterxml.jackson.annotation.JsonProperty

UPD:如果使用数据类,则为:

import kotlin.reflect.full.primaryConstructor

data class C (
@com.fasterxml.jackson.annotation.JsonProperty
var x: Int = 0
)

val prop = C::x
println(C::class.primaryConstructor
?.parameters
?.find { it.name == prop.name }
?.annotations
?.first()
?.annotationClass
)

输出:class com.fasterxml.jackson.annotation.JsonProperty

最新更新