Согласно play documentation этого является то, что пользовательские действия должны выглядеть следующим образом:Play 2.4: перехватывать и изменять тело ответа
object CustomAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: Request[A] => Future[Result]): Future[Result] = {
block(request)
}
}
Но сказать, если бы я хотел добавить «Foo» для каждого тела ответа, как мне делать что? Очевидно, что ниже не работает:
block.andThen(result => result.map(r => r.body.toString + "foo")).apply(request)
Любые идеи?
UPDATE: Что-то стоит отметить, что это действие будет в основном используется как асинхронный в контроллере:
def test = CustomAction.async {
//...
}
Спасибо, это работает, однако есть одна проблема - решение по умолчанию «ОК» и переопределит другие типы ответов, такие как «BadRequest» – Caballero
. Мой пример должен был быть простым, чтобы сделать его более полным, вам нужно будет прочитайте статус результата из ResponseHeader и соответствующим образом обработайте новый результат – josephpconley