2016-03-21 5 views
0

私はrequest.bodyがコントローラに入っています。何かをする前に、配列であるかどうかをチェックしたいと思います。それ以外の場合は配列でラップしてから処理を進めます。スカラ型チェックと変換

私はこれを試しましたが、私はそれを働かせる/解答を見つけるためにプレイスカラで十分に精通していません。

if (request.body.isInstanceOf[Array] == false) { 
    var input = Array(request.body) 
} 
else { 
    var input = request.body 
} 

私のコントローラは、このお試しください

def insertMultiple = Action.async(parse.json) { 
request => 
[INSERT IF/ELSE Statement here] 
    Json.fromJson[Seq[Person]](request.body) match { 
     case JsSuccess(newPersons, _) => 
     val documents = newPersons.map(implicitly[collection.ImplicitlyDocumentProducer](_)) 

     collection.bulkInsert(ordered = true)(documents: _*).map{ 
      multiResult => 
      Created(s"Created ${multiResult.n} persons") 
     } 

     case [email protected](_) => 
     Future.successful(BadRequest("Test")) 
    } 

}

+0

body' 'のデフォルトのタイプをされます'AnyContent'、なぜそれが' Array'かもしれないと思いますか?あなたは使用している完全なコントローラメソッドを投稿できますか? –

+0

基本的に私はdbに複数の人を加えることができますが、彼らは[{Person1}、{Person2}]として来ます。しかし、リクエストが{Person}だけで来たら、このメソッドは壊れます。だから私はそれを取り囲む配列をラップして、{{Person}}になってメソッドを動作させることを試みたと思った。 – Jeff

答えて

1

である:(あなたがボディパーサーを定義しなかった場合)

// as long as you have an implicit Format[Person] in scope 
// List[Person] 
val people = r.body.validate[JsArray].asOpt.getOrElse { 
    Json.arr(r.body) 
}.as[List[Person]] 
+0

それはうまくいった!私が仕事をしていても、JsArrayとしてボディを検証し、それが本当に戻ってこない場合は、Json.arrを使ってボディを配列にしました。 asOptは何を正確に行うのですか? – Jeff

+0

私は[List [Person]] – Jeff

関連する問題