Kotlin:JsonProperty.Access.READ_ONLY 数据 class
Kotlin: JsonProperty.Access.READ_ONLY on data class
我想存档这样的东西:
data class Task(
@JsonProperty("id", access = READ_ONLY)
val id: String?
...
<other params>
...
)
不幸的是,这会导致以下异常:
com.fasterxml.jackson.databind.JsonMappingException:
Argument #0 of constructor [constructor for Task, annotations: [null]]
has no property name annotation;
must have name when multiple-parameter constructor annotated as Creator
at [Source: {"id":"AT-5", ...}; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:305)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:268)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:476)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3899)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3794)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2842)
这个有效:
data class Task(
@JsonProperty("id")
val id: String?
)
我试过 @field:JsonProperty
没用。
如何让这个注释在 Kotlin 中工作?
我使用 dropwizard 1.1.0, Jackson 2.8.6
您应该使用 Jackson-Kotlin 模块,这样您就不需要为每个参数设置 JsonParameter
,因为该模块将从 Kotlin 编译器存储在 class。
模块位于 Github FasterXML/jackson-module-kotlin
请务必按照说明注册模块,在您自己的构建中包含 kotlin-reflect
依赖项,并使用辅助函数来简化您的 Kotlin 代码。
我想存档这样的东西:
data class Task(
@JsonProperty("id", access = READ_ONLY)
val id: String?
...
<other params>
...
)
不幸的是,这会导致以下异常:
com.fasterxml.jackson.databind.JsonMappingException:
Argument #0 of constructor [constructor for Task, annotations: [null]]
has no property name annotation;
must have name when multiple-parameter constructor annotated as Creator
at [Source: {"id":"AT-5", ...}; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:305)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:268)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:476)
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3899)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3794)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2842)
这个有效:
data class Task(
@JsonProperty("id")
val id: String?
)
我试过 @field:JsonProperty
没用。
如何让这个注释在 Kotlin 中工作? 我使用 dropwizard 1.1.0, Jackson 2.8.6
您应该使用 Jackson-Kotlin 模块,这样您就不需要为每个参数设置 JsonParameter
,因为该模块将从 Kotlin 编译器存储在 class。
模块位于 Github FasterXML/jackson-module-kotlin
请务必按照说明注册模块,在您自己的构建中包含 kotlin-reflect
依赖项,并使用辅助函数来简化您的 Kotlin 代码。