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代码。