无法在操作筛选器中读取请求正文

时间:2019-09-12 22:18:31

标签: scala playframework

给出以下curl命令:

curl  -d "param1=value1&param2=value2" -H "Content-Type: application/x-www-form-urlencoded"  -X POST http://localhost:9000/go

以下操作过滤器不会记录请求正文的内容:

import akka.stream.Materializer
import javax.inject.Inject
import play.api.Logging
import play.api.mvc.{ActionFilter, PlayBodyParsers, Request, Result}

import scala.concurrent.{ExecutionContext, Future}

class SomeActionFilter @Inject()(parse: PlayBodyParsers)(
  implicit materializer: Materializer,
  val executionContext: ExecutionContext
) extends ActionFilter[Request]
    with Logging {
  override protected def filter[A](request: Request[A]): Future[Option[Result]] =
    parse.formUrlEncoded.apply(request).run().map {
      case Left(result) => Some(result)
      case Right(formUrl) =>
        logger.info(formUrl.toString)
        None
    }
}

为什么不呢?指向Right(formUrl)的代码分支确实得到执行,但日志的输出为空字符串。

1 个答案:

答案 0 :(得分:0)

Playframework团队here通过如下强制转换来解决此问题:

request.asInstanceOf[Request[AnyContent]].body.asFormUrlEncoded