相當簡單的場景。我有:播放2.1.2:傑克遜似乎不支持這裏的@JsonTypeInfo
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@type")
class Thing(val id: Int)
...
class LowerThing(id: Int) extends Thing(id)
(我Json.read和Json.writes兩個類定義和必要的應用/不應用方法(它做簡單的事情 - 就好像它們是case類)
在一個控制器,在後我有:
request =>
val thing = request.body.asJson.get.as[Thing]
我可以張貼學家SON是這樣的:
{"@type":"com.foo.LowerThing","id":1}
或任何其他子類,但Jerkson總是給我一個直的事回來。
此外,當事物被序列出來,@type不包括,使它不可能爲客戶端實例化正確的對象類型上的另一端。
需要注意的是幾乎完全一樣的代碼的Java EE服務器下正常工作與傑克遜。甚至是老版本的傑克遜。我試圖證明一切都轉向了所有Scala &從Java EE開始玩,大多數情況下它變得非常美妙,但是這樣的事情必須要做出來,對我們來說真的是太遺憾了。處理我們自己的多態性JSON序列 - 必須有辦法做到這一點,但我不能很容易地找到它,我很困惑,爲什麼這不只是工作,因爲傑克遜是傑克遜)
不變性仍然是可能的 - 你只需要零ARG構造函數。我仍然更喜歡使用Play的更慣用的Scala JSON工具。 –
是否真的沒有直接的方法來實現Play JSON API的多態JSON序列化? –