2

Akka-HTTP 2.0-M2 を使用して REST サービスを設計していますが、クエリされたアクターの応答に依存する追加のヘッダーを提供したい状況に遭遇しました。

現在、私は以下を持っています...

val route = {
  path("oncologist") {
    get {
      parameters('active.as[Boolean].?, 'skip.as[Int].?, 'limit.as[Int].?).as(GetAllOncologists) {
        req =>
          complete {
            (oncologistActor ? req).mapTo[OncologistList]
          }
      }
    }
  }

これは問題なく戻っていますが。OncologistList のプロパティの一部を、本文で返すのではなく、応答ヘッダーに移動したいと考えています。つまり、合計レコード数とオフセットを返し、クライアントが使用する前と次の URL ヘッダー値を生成したいと考えています。進め方に迷っています。

4

1 に答える 1

7

onCompleteandrespondWithHeadersディレクティブを使用して、目的を達成できると思います。このonCompleteディレクティブFutureは、正確ask (?)に返される a の結果で機能します。次のようなケース クラスを使用した例を次に示します。

case class Foo(id:Int, name:String)

onCompleteそして、次のように示す簡単なルート:

get{
  parameters('active.as[Boolean].?, 'skip.as[Int].?, 'limit.as[Int].?).as(GetAllOncologists) { req =>
    val fut = (oncologistActor ? req).mapTo[Foo]
    onComplete(fut){
      case util.Success(f) =>
        val headers = List(
          RawHeader("X-MyObject-Id", f.id.toString),
          RawHeader("X-MyObject-Name", f.name)
        )
        respondWithHeaders(headers){
          complete(StatusCodes.OK)
        }

      case util.Failure(ex) =>
        complete(StatusCodes.InternalServerError )
    }
  }
}

askそのため、 onから成功した結果が得られた場合は、oncologistActorを利用しrespondWithHeadersて、いくつかのカスタム ヘッダーを応答に追加できます。うまくいけば、これはあなたが探していたものです。

于 2015-12-30T21:20:48.023 に答える