Я ищу способ распечатать тело ответа в рамках Play, у меня есть такой код:
object AccessLoggingAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {
Logger.info(s"""Request:
id=${request.id}
method=${request.method}
uri=${request.uri}
remote-address=${request.remoteAddress}
body=${request.body}
""")
val ret = block(request)
/*
ret.map {result =>
Logger.info(s"""Response:
id=${request.id}
body=${result.body}
""")
}
*/ //TODO: find out how to print result.body (be careful not to consume the enumerator)
ret
}
}
В настоящее время закомментированный код не работает так, как я хотел, я имею в виду, что он будет печатать:
Response:
id=1
body=play.api.libs.iteratee.Enumerator$$anon$18@39e6c1a2
Итак, мне нужно найти способ получить строку из Enumerator[Array[Byte]]. Я попытался понять концепцию Enumerator, прочитав это: http://mandubian.com/2012/08/27/understanding-play2-iteratees-for-normal-humans/
Итак..., если я правильно понял:
Я не должен засушивать перечислитель в процессе преобразования его в String. В противном случае клиент ничего не получит.
Предположим, я разобрался, как реализовать механизм T/filter. Но тогда... не будет ли это противоречить цели платформы Play как неблокирующей потоковой среды (потому что я буду создавать полный массив байтов в памяти, прежде чем вызывать для него toString и, наконец, регистрировать его)?
Итак, как правильно записать ответ?
Заранее спасибо, Рака
System.out
— этоOutputStream
, вы можете войти туда в потоковом режиме (хотя вы можете получить два чередующихся ответа). Если вы входите в базу данных, вы можете транслировать ее. И так далее. - person lmm   schedule 23.12.2014