scala - 无法在操作过滤器中读取请求正文
问题描述
给定以下 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) 的代码分支确实被执行,但日志的输出是一个空字符串。
解决方案
Playframework 团队在这里通过使用强制转换解决了这个问题,如下所示:
request.asInstanceOf[Request[AnyContent]].body.asFormUrlEncoded
推荐阅读
- python - python运算符重载__radd__和__add__
- powershell - How to delete first line of a file from powershell ise?
- excel - How to use formulas in Excel to pick a value from a sheet similar to SQL
- swift - Create a Apple TV App using existing web application
- vue.js - 没有 Vue 资源和 Axios 的 Vue HTTP 请求
- amazon-web-services - Mutation in GraphQL using apollo and AWS
- gradle - IDEA 中缺少 Gradle JavaDoc
- html - how to make text followed by a rectangle box filled with color html css with responsive
- rest - java interfaces to connect to sharepoint
- amazon-web-services - 只读副本重读会影响主数据库吗?