到目前为止,RequestHeader不包含Play Framework 2.0中的请求正文

时间:2016-03-07 00:37:17

标签: scala playframework playframework-2.0

我想知道,如果在doc

中,如何从请求中获取正文
trait RequestHeader extends AnyRef
The HTTP request header. Note that it doesn’t contain the request body yet.

这似乎来自2.0版本..

尝试获取异步处理请求的正文的示例。为了将其记录到文件中。

object AccessLoggingFilter extends EssentialFilter {

      def apply(inputAction: EssentialAction) = new EssentialAction { request =>

    val accessLogger = Logger("access")

    def apply(requestHeader: RequestHeader): Iteratee[Array[Byte], Result] = { ...

  Logger.info(s"""Request:
            Body             = ${requestHeader.???} """)

在SO上有一些哲学答案,例如here。但我不会称之为答案..

1 个答案:

答案 0 :(得分:1)

是的,播放不允许在过滤阶段访问请求正文。

如果您只想记录正文,可以为其创建新动作并撰写。

这是游戏2.6

的一个例子
def withLogging(action: Action[AnyContent]): Action[AnyContent] = {
    Action.async(action.parser) { request =>
      request.body match {
        case AnyContentAsJson(json) => Logger.info("JSON body was: " + Json.stringify(json))
        case _ => //implement more logging of different body types
      }
      action(request)
    }
  }


  def foo = withLogging(Action.async(cc.parsers.anyContent) { implicit request =>
    // do your stuff
  }))

如果您只有json端点,则可以为此编写特定操作。