2016-03-07 56 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端點,你可以寫一個具體行動的例子。