JSON リクエストを使用して、クライアントからサーバーにデータを送信しようとしています。JSON リクエストの本文は次のようになります。
{
"upload":
{
"ok":"some message",
"assemblyId":"a9d8f72q3hrq982hf98q3"
}
}
Play はリクエスト本文を JSON として認識できますが、個々の値、つまり「アップロード」オブジェクトを解析しようとすると、Play は指定されたパラメーターが見つからないと文句を言います。
Scala メソッドは次のとおりです。
def add(course:Long) = withAccount { account => implicit request =>
println()
println(request.body) // output: AnyContentAsJson({"upload":{"ok":"ASSEMBLY_COMP...
request.body.asJson.map { json =>
println()
println(json) // output: {"upload":{"ok":"ASSEMBLY_COMPLETED","assemb...
(json \ "upload").asOpt[models.SomeClass].map { upload =>
Ok("Got upload")
}.getOrElse {
BadRequest("Missing parameter [upload]")
}
}.getOrElse {
BadRequest("Expecting Json data")
}
}
上記のコードが失敗する理由を理解できません。このメソッドは、リクエスト ボディを json オブジェクトにマッピングするのに問題はありません。「println(json)」コマンドは、Chrome が「リクエスト ペイロード」として表示するものとまったく同じものを出力します。しかし、ルート オブジェクト「アップロード」を取得しようとすると、失敗します。そして、このメソッドは、パラメーターの欠落について不平を言う悪い要求を返します。