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

Global Filter Migration from Spray to Akka-Http 2

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

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

spray 自定义指令中,我可以使用 RequestContext 的函数 withHttpResponseMapped获取 HttpResponse => HttpResponse 的参数,并且 withHttpResponseMapped 将 return 一个新的 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" 和 return 新 RequestContext 对象参数的任何函数。是否有任何支持的功能或方法可以帮助我解决 Akka-Http 迁移中的这个问题?

提前感谢您的帮助。

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

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