Глобальная миграция фильтров из Spray в Akka-Http 2
У меня есть фильтр обработчика маршрута, используя Spray Custom Directive0.
Целью этой пользовательской директивы является создание фильтра запросов для определения времени обработки запроса.
Внутри пользовательской директивы Spray я могу использовать функцию RequestContext с помощью HttpResponseMapped, чтобы получить параметр 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), но не могу найти с помощью HttpResponseMapped или какой-либо функции в объекте RequestContext, которая может принимать параметр "HttpResponse => HttpResponse" и возвращать новый объект RequestContext. Есть ли какая-либо поддерживаемая функция или подход, который может помочь мне решить эту проблему в Akka-Http Migration?
Спасибо за помощь заранее.
1 ответ
mapResponse
директива это то, что вы ищете, а затем объединить директивы с flatMap
скорее, чем apply
:
val timeRequestInterval: Directive0 = extractRequestContext.flatMap { context =>
val timer = new RequestTimer(context)
mapResponse { response =>
timer.stop()
response
}
}