播放2.6.x Scala如何为Action指定TolerantText Body Parser

时间:2017-09-26 21:58:09

标签: json scala parsing playframework playframework-2.6

对于播放文档(https://www.playframework.com/documentation/2.6.x/ScalaLogging

中给出的以下代码段
import Foundation

let jsonString = """
{
  "direction" : "south"
}
"""

let jsonData = jsonString.data(using: .utf8)!
let decoder = JSONDecoder()
let myClassInstance = try! decoder.decode(MyClass.self, from: jsonData)
dump(myClassInstance)

/*
 prints:
 ▿ __lldb_expr_319.MyClass #0
   - direction: __lldb_expr_319.Direction.south
 */

以上代码使用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) } } ,我将如何使用TolerantText BodyParser? BodyParsers.Default似乎不存在?

我想使用TolerantText BodyParser,以便在提交POST请求的情况下记录错误,以便请求指定JSON的内容类型并发送无效的JSON正文,例如{“ - - “} (当给出无效的JSON时,默认BodyParser会立即抛出错误,这不会让我有机会记录该错误。我已经读过Play中的TolerantText BodyParser不会立即抛出错误,因为它忽略了内容头并且不会尝试根据内容标题解析正文。)

我希望能够使用TolerantText正文解析器或任何不会立即引发错误的内容,以便我可以记录该特定操作中发生的情况。

1 个答案:

答案 0 :(得分:1)

要注释PlayBodyParsers作为@rethab建议,请按如下方式定义您的类:

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