3

私の 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 を初めて使用するので、ここで非常に単純なことを見落としている可能性があります。

4

1 に答える 1