0

我有一个使用 Spray Custom Directive0 的路由处理程序过滤器。

这个自定义指令的目的是构建一个请求过滤器来计时请求处理时间。

spray自定义指令中,我可以使用RequestContext的函数withHttpResponseMapped来获取HttpResponse => HttpResponse的参数,并且 withHttpResponseMapped 将返回一个新的 RequestContext 对象,如下所示:

 def timeRequestInterval: Directive0 = {
mapRequestContext { context =>
  val requestTimer = new RequestTimer(context.request)
  context.withHttpResponseMapped { response =>
    requestTimer.stop()
    response.mapEntity { entity =>
        entity
    }
  }
}

现在我尝试将自定义指令从 Spray 迁移到Akka-Http(2.4.8),但我找不到 withHttpResponseMapped或 RequestContext 对象中可以采用“HttpResponse => HttpResponse”参数并返回新的 RequestContext 对象的任何函数。是否有任何受支持的功能或方法可以帮助我解决 Akka-Http 迁移中的这个问题?

提前感谢您的帮助。

4

1 回答 1

2

mapResponse指令是您要查找的内容,然后将指令与flatMap而不是apply

val timeRequestInterval: Directive0 = extractRequestContext.flatMap { context =>
  val timer = new RequestTimer(context)
  mapResponse { response =>
    timer.stop()
    response
  }
}
于 2017-03-10T13:45:07.377 回答