2017-09-26 33 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