gpt4 book ai didi

scala - 如何在单个路由中解码 POST 参数和 JSON 正文?

转载 作者:行者123 更新时间:2023-12-04 11:51:10 27 4
gpt4 key购买 nike

我有这条路线:

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
}

我已经设法让它在 the documentation on the entity directive 之后的单独 route 工作:
path("test") {
import scrive.actors.ScriveJsonProtocol
import spray.httpx.SprayJsonSupport._
post {
entity(as[ScriveRequest]) { scrive =>
complete(scrive)
}
}
}

但我不知道如何将这两条路线合二为一。由于它们包含在函数中,因此我无法调用参数 long , lat来自 entity功能,我想它们不存在于那个范围内。反过来也是一样。

我希望能够访问我的参数和我的 POST 正文,然后调用传递所有数据的服务:
val elevationService = actorRefFactory.actorOf(Props(new ElevationService(requestContext)))
elevationService ! ElevationService.Process(long, lat, bodyParams)

最佳答案

您可以嵌套指令:

 path("ElevationService" / DoubleNumber / DoubleNumber) { (long, lat) =>
post {
entity(as[ScriveRequest]) { scrive =>
onSuccess( elevationService ? ElevationService.Process(long, lat, bodyParams) ) {
actorReply =>
complete(actorReply)
}
}
}

您也可以使用 &更直接地组合两个指令:
(path("ElevationService" / DoubleNumber / DoubleNumber) & entity(as[ScriveRequest])) {
(long, lat, scriveRequest) => ...

关于scala - 如何在单个路由中解码 POST 参数和 JSON 正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27707731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com