从 RequestContext 访问 akka-http 中的路径段?
Accessing the segments of a path in akka-http out of a RequestContext?
我正在寻找一种在方法中访问带有 akka-http 的请求路径段列表的方法:
val route = Seq(
path("api" / "sub" / IntNumber / IntNumber) { sub }
).reduce(_~_)
def sub(request: RequestContext): Future[RouteResult] = get {
// how to have access to the two IntNumbers?
}(request)
我知道我可以直接在路由代码中得到它们:
path("api" / "sub" / IntNumber / IntNumber) { (a, b) => sub(a, b) }
...
def sub(a: Int, b: Int)(request: RequestContext): Future[RouteResult] = get {
...
但我想保持我的路由代码干净。
谢谢
让我们直观地简化它...
第 1 步:
开始于:
path("api" / "sub" / IntNumber / IntNumber) { (a, b) => sub(a, b) }
def sub(a: Int, b: Int)(request: RequestContext): Future[RouteResult] = ???
不要显式传递参数,Scala 会为您完成。
所以这个:
path("api" / "sub" / IntNumber / IntNumber) { (a, b) => sub(a, b) }
变成这样:
path("api" / "sub" / IntNumber / IntNumber) { sub }
第 2 步:
因为我们有这个定义:
type Route = RequestContext => Future[RouteResult]
我们可以将sub
方法的(request: RequestContext): Future[RouteResult]
部分替换为Route
。
所以这个:
def sub(a: Int, b: Int)(request: RequestContext): Future[RouteResult] = ???
变成这样:
def sub(a: Int, b: Int): Route = ???
或者如果您喜欢这种风格:
val sub: (Int, Int) => Route = { (a, b) => ??? }
用法示例:
path("api" / "sub" / IntNumber / IntNumber) { sub }
def sub(a: Int, b: Int): Route = complete(s"$a / $b")
val sub: (Int, Int) => Route = { (a, b) => complete(s"$a / $b") }
请注意,从视觉上看它看起来更简单一些,但在功能上和类型签名方面基本相同。
我正在寻找一种在方法中访问带有 akka-http 的请求路径段列表的方法:
val route = Seq(
path("api" / "sub" / IntNumber / IntNumber) { sub }
).reduce(_~_)
def sub(request: RequestContext): Future[RouteResult] = get {
// how to have access to the two IntNumbers?
}(request)
我知道我可以直接在路由代码中得到它们:
path("api" / "sub" / IntNumber / IntNumber) { (a, b) => sub(a, b) }
...
def sub(a: Int, b: Int)(request: RequestContext): Future[RouteResult] = get {
...
但我想保持我的路由代码干净。
谢谢
让我们直观地简化它...
第 1 步:
开始于:
path("api" / "sub" / IntNumber / IntNumber) { (a, b) => sub(a, b) }
def sub(a: Int, b: Int)(request: RequestContext): Future[RouteResult] = ???
不要显式传递参数,Scala 会为您完成。
所以这个:
path("api" / "sub" / IntNumber / IntNumber) { (a, b) => sub(a, b) }
变成这样:
path("api" / "sub" / IntNumber / IntNumber) { sub }
第 2 步:
因为我们有这个定义:
type Route = RequestContext => Future[RouteResult]
我们可以将sub
方法的(request: RequestContext): Future[RouteResult]
部分替换为Route
。
所以这个:
def sub(a: Int, b: Int)(request: RequestContext): Future[RouteResult] = ???
变成这样:
def sub(a: Int, b: Int): Route = ???
或者如果您喜欢这种风格:
val sub: (Int, Int) => Route = { (a, b) => ??? }
用法示例:
path("api" / "sub" / IntNumber / IntNumber) { sub }
def sub(a: Int, b: Int): Route = complete(s"$a / $b")
val sub: (Int, Int) => Route = { (a, b) => complete(s"$a / $b") }
请注意,从视觉上看它看起来更简单一些,但在功能上和类型签名方面基本相同。