Kotlin:数据类的JsonProperty.Access.READ_ONLY
我想存档这样的东西:
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,杰克逊2.8.6
您应该使用Jackson-Kotlin模块,然后您不需要为每个参数设置JsonParameter
,因为模块会从Kotlin编译器存储在类中的元数据中推断出其他参数名称。
该模块位于Github的FasterXML / jackson-module-kotlin
请务必按照说明注册模块,在您自己的版本中包含kotlin-reflect
依赖项,并使用helper函数来简化您的Kotlin代码。