如何在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中的类表示法