Scala 如何在访问请求正文时编写操作?

Scala 如何在访问请求正文时编写操作?,scala,playframework,playframework-2.0,Scala,Playframework,Playframework 2.0,是否有一种方法可以组合动作,同时在每个动作中访问身体的不同部分? 例如,如果我有一个json,看起来像这样: { "compayId": 123, "reason": "some_reason", "date": "2017-01-01", "roles": ["1", "2"] } 我想访问审计操作中的“companyId”和“reason”,同时访问实际操作中的“date”和“roles”。 所以我创造了这样的东西,当然不起作用 trait Audit { def

是否有一种方法可以组合动作,同时在每个动作中访问身体的不同部分? 例如,如果我有一个json,看起来像这样:

{
   "compayId": 123,
   "reason": "some_reason",
   "date": "2017-01-01",
   "roles": ["1", "2"]
}
我想访问审计操作中的“companyId”和“reason”,同时访问实际操作中的“date”和“roles”。 所以我创造了这样的东西,当然不起作用

trait Audit { def auditDao: AuditDao
 def audit[A](action: Action[A]) = Action.async(action.parser) { implicit request => {
   action(request).flatMap( r => 
       Json.toJson(request.body.asInstanceOf[RawBuffer].asBytes().get.toArray).validate[AuditLog].fold( //The instanceOf is ugly, and will not work, it's just for the example
           errors => errorsToFutureResult(errors)(request),
           audit => auditDao.save(audit).map(_ => r)
       )
   }
  }
}
然后使用审核方法包装我的端点:

def get() = audit(Action.async(BodyParsers.parse.raw) { (request: Request[RawBuffer]) =>
 Json.toJson(request.body.asBytes().get.toArray).validate[Roles].fold( 
           errors => errorsToFutureResult(errors)(request),
           roles => //Do stuff with the roles...
       )
})
有办法吗? 谢谢

看一看,看一看