В настоящее время я пытаюсь перехватить и изменить текст некоторых запросов, поступающих в приложение Play 2.6. Цель состоит в том, чтобы добавить новый параметр в перехваченный запрос, чтобы его можно было перенаправить в следующие цепные действия. Вот к чему я пришел:
object MandoAction extends ActionBuilder[Request, AnyContent] {
override def parser: BodyParser[AnyContent] = parse.default
override def invokeBlock[A](request: Request[A], block: Request[A] => Future[Result]): Future[Result] = {
request.body match {
case AnyContentAsFormUrlEncoded(body) =>
val newBody: Map[String, Seq[String]] = body + ("hero" -> Seq("mando"))
block(request.withBody(newBody))
// case AnyContentAsJson(body) =>
// block(request)
case _ =>
block(request)
}
}
}
Не компилируется из-за того, что Request[Map[String, Seq[String]]]
не соответствует ожидаемому универсу c Request[A]
. Это правильный способ изменения данных запроса? Как я могу изменить запрос, не зная, каким может быть тело (например, иногда это может быть json, x- www-form-urlencoded, et c)?