私の Scala Play プロジェクトには、JSON を入力として受け取るコントローラー メソッドがあります。この JSON を私が持っているモデル オブジェクトに変換したいと思います。
これが私のコントローラーメソッドです:
def broadcastPost = Action(parse.json) { request =>
(request.body).asOpt[Post].map { post =>
Post.create(post.channelId, post.message, post.datePosted, post.author)
Ok(play.api.libs.json.Json.toJson(
Map("status" -> "OK", "message" -> ("Post created"))
))
}.getOrElse {
BadRequest(play.api.libs.json.Json.toJson(
Map("status" -> "Error", "message" -> ("Missing parameter [Post]"))
))
}
}
そして、ここにモデルがあります:
case class Post(id: Pk[Long], channelId: Long, message: String, datePosted: Date, author: String)
およびその暗黙のフォーマッタ:
implicit val postFormat = (
(__ \ "id").formatNullable[Long] and
(__ \ "channelId").format[Long] and
(__ \ "message").format[String] and
(__ \ "datePosted").format[Date] and
(__ \ "author").format[String]
)((id, channelId, message, datePosted, author) => Post(id.map(Id(_)).getOrElse(NotAssigned), channelId, message, datePosted, author),
(p: Post) => (p.id.toOption, p.channelId, p.message, p.datePosted, p.author))
次のデータを使用してそのメソッドに POST リクエストを送信すると:
{"channelId":1, "message":"Wanna get a game in?", "dateCreated":"5-15-2013", "author":"Eliot Fowler"}
次の応答が返されます。
{"status":"Error","message":"Missing parameter [Post]"}
私は Scala を初めて使用するので、ここで非常に単純なことを見落としている可能性があります。