2017-03-09 7 views
0

私は、スプレイカスタムディレクティブ0を使用してルートハンドラのフィルタを持っています。グローバルフィルタスプレイからAkka-Httpへの移行2

このカスタムディレクティブの目的は、リクエスト処理時間を計るためのリクエストフィルタを構築することです。 インサイド

カスタムディレクティブをスプレー、私はのHttpResponse =>のHttpResponseのパラメータを取るためにwithHttpResponseMappedRequestContextのの機能を使用することができ、そしてwithHttpResponseMappedはこのように、新しいRequestContextのオブジェクトを返します。

def timeRequestInterval: Directive0 = { 
mapRequestContext { context => 
    val requestTimer = new RequestTimer(context.request) 
    context.withHttpResponseMapped { response => 
    requestTimer.stop() 
    response.mapEntity { entity => 
     entity 
    } 
    } 
} 

は今、私はにスプレーからカスタムディレクティブを移行しようアッカ-HTTP(2.4.8)が、withHttpResponseMapped、または "HttpResponse => HttpResponse"のパラメータをとり、新しいRequestContextオブジェクトを返すことができるRequestContextオブジェクトの関数を見つけることができません。 Akka-Http Migrationでこの問題を解決するのに役立つサポートされている機能やアプローチはありますか?

ありがとうございました。

答えて

1

mapResponseディレクティブはflatMapではなくapplyでディレクティブを組み合わせて、あなたが探しているものです:

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

、ヨハン、ありがとうございました。それは今働く。本当に助けに感謝します。 Alan – Alan

+0

私は非常に似たフローを試みていますが、代わりに次のエラーが発生しています。 'タイプの不一致。 [エラー]が見つかりました:akka.http.scaladsl.server.Directive [Unit] required:akka.http.scaladsl.server.RequestContext => scala.concurrent.Future [akka.http.scaladsl.server.RouteResult] extractRequestContext.flatMap { requestContext => ' – gregsilin

関連する問題