2016-03-07 52 views
1

我想知道,如何从请求得到一个身体,如果在docRequestHeader不包含在播放Framework 2.0的请求主体至今

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

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

如果您只想记录正文,则可以为该正文创建一个新操作并撰写该正文。

这是从游戏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端点,你可以写一个具体行动的例子。