1

extractStrictEntity和 和有什么不一样toStrictEntity?这是extractStrictEntity路线代码:

import scala.concurrent.duration._
val route = extractStrictEntity(3.seconds) { entity =>
  complete(entity.data.utf8String)
}

这是toStrictEntity路线代码:

import scala.concurrent.duration._
val route = toStrictEntity(3.seconds) { entity =>
  complete(entity.data.utf8String)
}
4

1 回答 1

1

您的第二条路线,即带有 的路线,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

于 2018-04-24T18:19:38.220 回答