首先,我先寫下理想中,Jackson在Scala上該怎麼使用,在來談,為什麼不能這麼用
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes(Array(
new JsonSubTypes.Type(name = "flood", value = classOf[Flood]),
new JsonSubTypes.Type(name = "mountainslide", value = classOf[MountainSlide])
))
trait Disaster {}
case class Flood @JsonCreator()(
@BeanProperty @JsonProperty("event") event: String,
@BeanProperty @JsonProperty("address") address: String
) extends Disaster
case class MountainSlide @JsonCreator()(
@BeanProperty @JsonProperty("event") event: String,
@BeanProperty @JsonProperty("landmark") landmark: String
) extends Disaster
在 scala 2.8.0 上面,我碰上的問題是不能在annotation內使用 java enum 如:
use = JsonTypeInfo.Id.NAME 在 scala 2.9.1 上,上面的問題消失了,不過碰上另一個問題,當一個 annotation 上面有兩個 java enum,scala compiler 及 java compiler 都不會吐出錯誤,但是annotations從bytecode中消失了,SI-5165中紀錄了這問題。
不管怎樣,在現在這時間,若是你想用Jackson + Scala來處理多型,那麼,最頂層類別,一定要用Java來寫,才不會碰上上述兩個問題。
No comments:
Post a Comment