给出以下curl命令:
curl -d "param1=value1¶m2=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)的代码分支确实得到执行,但日志的输出为空字符串。
答案 0 :(得分:0)
Playframework团队here通过如下强制转换来解决此问题:
request.asInstanceOf[Request[AnyContent]].body.asFormUrlEncoded