szukam sposobu, aby wydrukować treść odpowiedzi w ramach Play, mam kod jak poniżej:Play/Rejestrowanie/Drukuj Response nadwozia/przejechany wyliczający/buffer ciało
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
}
}
Obecnie Kod zakomentowanych nie działa jak chciałem, to znaczy, że to wydrukować:
Response:
id=1
body=pla[email protected]
tak, muszę znaleźć sposób, aby uzyskać ciąg z Enumerator [Array [Byte]]. Starałem się zrozumieć ideę Enumerator czytając to: http://mandubian.com/2012/08/27/understanding-play2-iteratees-for-normal-humans/
więc ... jeśli dobrze rozumiem poprawnie:
I nie powinno sucha-up wyliczający w procesie przekształcania go na ciąg. W przeciwnym razie klient nie otrzyma nic.
Załóżmy, że wymyślę, jak zaimplementować mechanizm T/filtra. Ale czy ... czy nie zniszczyłoby to celu struktury Play jako nieblokującej frameworki strumieniowej (ponieważ budowałbym całą tablicę bajtów w pamięci, przed wywołaniem doString na nim, a na koniec logowaniem się)?
Jaki jest właściwy sposób rejestrowania odpowiedzi?
Dzięki z góry, Raka
Powinieneś zarejestrować odpowiedź w taki sposób, aby przesyłała strumieniowo. Na przykład. 'System.out' jest' OutputStream', możesz logować się tam w sposób streamingu (chociaż możesz skończyć z dwiema przeplecionymi odpowiedziami). Jeśli logujesz się do bazy danych, możesz przejść do tego strumienia. I tak dalej. – lmm
Myślę, że znalazłem odpowiedź, tutaj: http://stackoverflow.com/questions/17752151/scala-play-2-1-accessing-request-and-response-bodies-in-a-filter –