我有一个使用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中的这个问题?
提前感谢您的帮助。
答案 0 :(得分:2)
您正在寻找mapResponse
指令,然后将指令与flatMap
而不是apply
合并:
val timeRequestInterval: Directive0 = extractRequestContext.flatMap { context =>
val timer = new RequestTimer(context)
mapResponse { response =>
timer.stop()
response
}
}