您的第二条路线,即带有 的路线,toStrictEntity无法编译;它失败了:
value data is not a member of akka.http.scaladsl.server.RequestContext
至于两个指令之间的区别,extractStrictEntity调用toStrictEntity:
def extractStrictEntity(timeout: FiniteDuration): Directive1[HttpEntity.Strict] =
toStrictEntity(timeout) & extract(_.request.entity.asInstanceOf[HttpEntity.Strict])
// ...
def toStrictEntity(timeout: FiniteDuration): Directive0 =
// ...
以下两条路线基本相同:
val route1 = extractStrictEntity(3.seconds) { entity =>
complete(entity.data.utf8String)
}
val route2 = toStrictEntity(3.seconds) {
extractRequest { req =>
req.entity match {
case strict: HttpEntity.Strict =>
complete(strict.data.utf8String)
case _ =>
complete("Request entity is not strict!")
}
}
}
extractStrictEntity返回 a Directive1[HttpEntity.Strict],表示它提取单个HttpEntity.Strict值。另一方面,toStrictEntity返回 a ,这意味着它不提取任何内容——因此在上面的示例中Directive0嵌套调用 to 。extractRequest