2017-09-26 34 views
0

對於播放文件(https://www.playframework.com/documentation/2.6.x/ScalaLogging播放2.6.x的斯卡拉如何指定TolerantText正文分析器用於行動

class AccessLoggingAction @Inject() (parser: BodyParsers.Default)(implicit ec: ExecutionContext) extends ActionBuilderImpl(parser) { 
    val accessLogger = Logger("access") 
    override def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = { 
    accessLogger.info(s"method=${request.method} uri=${request.uri} remote-address=${request.remoteAddress}") 
    block(request) 
    } 
} 

上面的代碼使用BodyParsers.Default給出下面的一段代碼,我怎麼會用一個TolerantText BodyParser代替?它似乎不存在BodyParsers.TolerantText存在?

我想使用TolerantText BodyParser,這樣我就可以在提交POST請求的事件中記錄錯誤,以便請求指定JSON的內容類型併發送無效的JSON主體,例如{「 - - 「} (Default BodyParser在給出無效的JSON時立即拋出一個錯誤,這不會讓我有機會記錄該錯誤。我讀過Play中的TolerantText BodyParser不會立即拋出錯誤,因爲它會忽略內容頭,並不會嘗試根據內容頭來解析主體)。

我想能夠使用TolerantText身體解析器或任何不立即拋出錯誤的東西,所以我可以記錄何時發生這種特定行爲。

+0

注入'PlayBodyParsers'代替 – rethab

+0

我試着_PlayBodyParsers_注射用以下 '''類AccessLoggingAction @Inject( )(解析器:PlayBodyParsers.tolerantText)(隱含的EC:ExecutionContext)擴展ActionBuilderImpl(解析器){... ''' 上面似乎不工作,並與上述,我得到以下錯誤: (_Cannot解析符號tolerantText_) 任何想法,如何解決這個問題? 謝謝你的時間。 – user8679288

回答

1

要注入PlayBodyParsers爲@rethab建議,定義類,如下所示:

class AccessLoggingAction @Inject() (parser: PlayBodyParsers)(implicit ec: ExecutionContext) 
    extends ActionBuilderImpl(parser.tolerantText) { 
    ... 
} 
+0

謝謝,那有效! – user8679288