首先,我先寫下理想中,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