全局过滤器从Spray迁移到Akka-Http 2

时间:2017-03-09 23:15:28

标签: akka spray akka-http spray-dsl

我有一个使用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 Migration中的这个问题?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您正在寻找mapResponse指令,然后将指令与flatMap而不是apply合并:

val timeRequestInterval: Directive0 = extractRequestContext.flatMap { context =>
  val timer = new RequestTimer(context)
  mapResponse { response =>
    timer.stop()
    response
  }
}