如何在Kotlin中使用Jackson JsonSubTypes注释

我试图转换一些Java代码,使用jackson的@JsonSubTypes注释来管理多态。

这是工作的Java代码:

@JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value = Comment.class, name = "CommentNote"), @JsonSubTypes.Type(value = Photo.class, name = "PhotoNote"), @JsonSubTypes.Type(value = Document.class, name = "DocumentNote") }) public abstract class Note implements Identifiable { [...] 

这是我认为相当的Kotlin代码:

 JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") JsonSubTypes( JsonSubTypes.Type(value = javaClass(), name = "CommentNote"), JsonSubTypes.Type(value = javaClass(), name = "PhotoNote"), JsonSubTypes.Type(value = javaClass(), name = "DocumentNote") ) abstract class Note : Identifiable { [...] 

但是,我在三个“JsonSubTypes.Type”行中得到了以下错误:

 Kotlin: An annotation parameter must be a compile-time constant Kotlin: Annotation class cannot be instantiated 

任何想法?

发现这是编译器中的一个错误 ,感谢你的报告。 要解决这个问题,你可以导入JsonSubTypes.Type并且没有JsonSubTypes.Type使用它:

 import org.codehaus.jackson.annotate.JsonSubTypes.Type JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") JsonSubTypes( Type(value = javaClass(), name = "CommentNote"), Type(value = javaClass(), name = "PhotoNote"), Type(value = javaClass(), name = "DocumentNote") ) abstract class Note : Identifiable { [...] 

我相信这已经解决了,现在你可以这样写:

 import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") @JsonSubTypes( JsonSubTypes.Type(value = Comment::class, name = "CommentNote"), JsonSubTypes.Type(value = Photo::class, name = "PhotoNote"), JsonSubTypes.Type(value = Document::class, name = "DocumentNote")) interface Note 

请注意JsonSubTypes.Type中的类表示法