我想知道是否可以合并JsResult对象,类似于〜>运营商在场比赛2.1+。在下面的代码中,我想验证两个输入,然后相应地更新用户信息。
两个验证方法调用之间的和运算符无效。在以下场景中,是否有一种方法可以将两个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))
}
}
答案 0 :(得分:0)
您可以使用flatmap来组合JsResults。
答案 1 :(得分: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
和and
是play.api.libs.functional
包的一部分。