sab*_*sab 0 jackson kotlin jackson-modules
我使用 lib jackson-module-kotlin 将 json 字符串解析为对象。
我的问题是,当我将字符串解析为 enum 时,当我使用 intellij 启动时,我有以下堆栈跟踪:
引起原因:kotlin.reflect.jvm.internal.KotlinReflectionInternalError:尚未完全支持内置 Kotlin 类型的反射。未找到公共最终 val 名称的元数据:kotlin.Enum[DeserializedPropertyDescriptor@212b316a] 中定义的 kotlin.String
我用maven启动的时候没有这个问题。
我使用 kotlin 1.1.51,使用 intellij kotlin 插件 1.2.0-release-IJ2017.3-1,我的目标是 JVM 1.8,我使用 jackson-module-kotlin 版本 2.8.7
我应该怎么办?
enum class CType { DEAL, FILE }
data class Code(val code: String, val type: CType)
fun testDeserialization() {
val mapper = jacksonObjectMapper()
// following line throws an exception:
mapper.readValue("""{"code":"A","type":"DEAL"}""", Code::class.java)
}
Run Code Online (Sandbox Code Playgroud)
我让它工作的唯一方法是添加额外的@JvmStatic注释。我mapper.registerModule(new KotlinModule());什么都没有,除了这个:
package nc.features.algo.model
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonValue
enum class LHStatus (
@get:JsonValue val code: Int
) {
LH_POS_OVU_WAITING(1),
LH_NEG_OVU_WAITING(2),
;
companion object {
@JsonCreator
@JvmStatic
fun deser(code: Int?): LHStatus? {
if (code == null) return null
for (i in values()) {
if (i.code == code) return i
}
return null
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5046 次 |
| 最近记录: |