0

对于 Play 文档 ( https://www.playframework.com/documentation/2.6.x/ScalaLogging )中给出的以下代码

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 正文,例如 {"---"} (当给出无效的 JSON 时,默认 BodyParser 会立即引发错误,这不会让我有机会记录该错误。我读过 Play 中的 TolerantText BodyParser 不会立即引发错误,因为它忽略了内容标题并且不会尝试根据内容标头解析正文。)

我希望能够使用 TolerantText 正文解析器或任何不会立即引发错误的东西,这样我就可以在该特定操作中发生这种情况时进行记录。

4

1 回答 1

2

PlayBodyParsers按照@rethab 的建议进行注入,请按如下方式定义您的类:

class AccessLoggingAction @Inject() (parser: PlayBodyParsers)(implicit ec: ExecutionContext)
    extends ActionBuilderImpl(parser.tolerantText) {
  ...
}
于 2017-09-28T00:58:15.677 回答