Глобальная миграция фильтров из 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
  }
}
Другие вопросы по тегам