1

我想知道是否可以合并 JsResult 对象,类似于 play 2.1+ 中的 ~> 运算符。在下面的代码中,我想验证两个输入,然后相应地更新用户信息。

下面两个 validate 方法调用之间的and运算符无效。在以下场景中,有没有办法将两个 JsResult 对象组合在一起?

def update(uid:String) =  Action { request=>
  ( JsString(uid).validate[BSONObjectID] **and** request.body.validate[User]) match {
    case JsSuccess(user,_) =>  Async {
      collection.update(Json.obj("_id"->uid),v).map{
        case someError:LastError if someError.err.isDefined =>  ....
        case noError => ...
      }
    }
    case errors:JsError => Ok(JsError.toFlatJson(errors))
  }   
}
4

2 回答 2

0

您可以使用 flatmap 来组合 JsResults。

于 2013-09-07T09:11:18.663 回答
0

这是您可以将两个 JsResult 合二为一的方法:

import play.api.libs.json._
import play.api.libs.functional.syntax._

def update(uid:String) =  Action { request =>
  (JsString(uid).validate[BSONObjectID] and request.body.validate[User]).tupled 
    match {
      case JsSuccess((uid,user),_) =>  Async {

tupled并且andplay.api.libs.functional包装的一部分。

于 2016-12-04T05:07:21.353 回答