Ваш второй маршрут, с 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
возвращает Directive1[HttpEntity.Strict]
, что означает извлечение одного значения HttpEntity.Strict
.С другой стороны, toStrictEntity
возвращает Directive0
, что означает, что он ничего не извлекает - отсюда и вложенный вызов extractRequest
в приведенном выше примере.