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 でオプションの (nullable) プロパティ "id" を読み取り、その存在に基づいてplayerId
属性をどちらかId[Long]
またはどちらかに設定するにはどうすればよいNotAssigned
か」です。
また、JSON インセプション マクロを使用するように何らかの形で書き直すことはできますか?