我将我的Play 2.0.x应用程序迁移到Play 2.1-RC2,并遇到了以下问题。在我的应用程序中,我有一个类似于以下的案例类:
case class Player(
playerId: Pk[Long],
name: Option[String],
groupId: Long
)
在我的Play 2.0.x代码中,我有一个PlayerFormat
对象,用于读取和写入JSON实例。它的代码如下:
object PlayerFormat extends Format[Player] {
def reads(json: JsValue): Player = Player(
(json \ "id").asOpt[Long].map( Id(_) ).getOrElse( NotAssigned ),
(json \ "name").asOpt[String],
(json \ "group" \ "id").as[Long]
)
def writes(p: Player): JsValue = toJson(
Map(
"id" -> toJson(p.playerId.toOption),
"name" -> toJson(p.name),
"group" -> toJson(
Map("id" -> p.groupId)
)
)
)
}
问题是:“在Play 2.1中如何读取可选(可空)属性“id”,并根据其是否存在将playerId
属性设置为Id[Long]
或NotAssigned
?”
此外,这能否以某种方式重写以使用JSON内部宏?