私はこのルートを持っています:
val routes =
pathPrefix("api") {
path("ElevationService" / DoubleNumber / DoubleNumber) { (long, lat) =>
post {
requestContext =>
println(long, lat)
}
}
}
これはうまく機能します。次のように呼び出すことができますElevationService
。
http://localhost:8080/api/ElevationService/39/80
問題は、リクエストで送信された本文を JSON として解析したいということです。次のようになります。
{
"first": "test",
"second": 0.50
}
エンティティ ディレクティブに関するドキュメントに従って、別のルートで動作させることができました。
path("test") {
import scrive.actors.ScriveJsonProtocol
import spray.httpx.SprayJsonSupport._
post {
entity(as[ScriveRequest]) { scrive =>
complete(scrive)
}
}
}
しかし、これら 2 つのルートを 1 つにマージする方法がわかりません。それらは関数にラップされているため、関数内からparamslong
を呼び出すことはできません。それらはそのスコープには存在しないと思います。同じか、その逆です。lat
entity
params と POST 本体の両方にアクセスできるようにしてから、すべてのデータを渡すサービスを呼び出したいと考えています。
val elevationService = actorRefFactory.actorOf(Props(new ElevationService(requestContext)))
elevationService ! ElevationService.Process(long, lat, bodyParams)