通过 Kotlin Reflect 看不到 Jackson 注释

Jackson annotation not visible via 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 注释?

好的,发现 Jackson 注释附加到 Java 字段,而不是 Kotlin 属性。所以这个解决方法有效:

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

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

更新: 如果使用数据 class 那么这个:

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