在 Akka 指令中提取路径头
Extracting Path Head in Akka Directives
我正在使用 akka directives 来匹配特定的路径模式:
/item/quantity
例子是
/apples/100
/bananas/200
事先不知道可能的项目(例如“苹果”、“香蕉”...),因此使用 path
对项目进行硬编码不是一种选择。
但是,我找不到提取路径头部的 PathMatcher。我正在寻找
形式的东西
val route =
get {
path(PathHeadAsString) { item : String =>
path(IntNumber) { qty : Int =>
complete(s"item: $item quantity: $qty")
} ~ complete("no quantity specified")
} ~ complete("no item specified")
}
在哪里
Get("/apples/100") ~> route ~> check {
responseAs[String] shouldEqual "item: apples quantity: 100"
}
有没有办法提取路径的第一段?
如果数量在路径中,path(segment)
匹配器将不会匹配。
我显然可以使用 path(segments)
来获取路径元素的 List[String]
但我必须手动提取列表头和列表尾,这看起来很不雅。
提前感谢您的考虑和回复。
你可以compose PathMatchers with modifiers这样
path(Segment / IntNumber) { case (item, qty) =>
complete(s"item: $item quantity: $qty")
}
或者如果您需要完整的 break-out 使用 pathPrefix
:
val route =
pathPrefix(Segment) { item : String =>
path(IntNumber) { qty : Int =>
complete(s"item: $item quantity: $qty")
} ~
pathEnd { complete("no quantity specified") } ~
complete("something else going on here")
} ~
complete("no item specified")
(请注意那里的附加 pathEnd
指令;即便如此,我也不会说匹配的模式代表所有可能的情况。)
pathPrefix
指令“在使用前导斜杠后将给定的 PathMatcher 应用于剩余不匹配路径的前缀。”
path
指令“在使用前导斜杠后将给定的 PathMatcher 应用于剩余的不匹配路径。”
pathEnd
指令“如果请求路径已完全匹配,则仅将请求传递到其内部路由。”
来自 akka path-matchers,Segment
路径匹配器“如果不匹配的路径以路径段开头(即不是斜杠)则匹配。如果是这样,则提取路径段作为 String 实例。"
我正在使用 akka directives 来匹配特定的路径模式:
/item/quantity
例子是
/apples/100
/bananas/200
事先不知道可能的项目(例如“苹果”、“香蕉”...),因此使用 path
对项目进行硬编码不是一种选择。
但是,我找不到提取路径头部的 PathMatcher。我正在寻找
形式的东西val route =
get {
path(PathHeadAsString) { item : String =>
path(IntNumber) { qty : Int =>
complete(s"item: $item quantity: $qty")
} ~ complete("no quantity specified")
} ~ complete("no item specified")
}
在哪里
Get("/apples/100") ~> route ~> check {
responseAs[String] shouldEqual "item: apples quantity: 100"
}
有没有办法提取路径的第一段?
如果数量在路径中,path(segment)
匹配器将不会匹配。
我显然可以使用 path(segments)
来获取路径元素的 List[String]
但我必须手动提取列表头和列表尾,这看起来很不雅。
提前感谢您的考虑和回复。
你可以compose PathMatchers with modifiers这样
path(Segment / IntNumber) { case (item, qty) =>
complete(s"item: $item quantity: $qty")
}
或者如果您需要完整的 break-out 使用 pathPrefix
:
val route =
pathPrefix(Segment) { item : String =>
path(IntNumber) { qty : Int =>
complete(s"item: $item quantity: $qty")
} ~
pathEnd { complete("no quantity specified") } ~
complete("something else going on here")
} ~
complete("no item specified")
(请注意那里的附加 pathEnd
指令;即便如此,我也不会说匹配的模式代表所有可能的情况。)
pathPrefix
指令“在使用前导斜杠后将给定的 PathMatcher 应用于剩余不匹配路径的前缀。”path
指令“在使用前导斜杠后将给定的 PathMatcher 应用于剩余的不匹配路径。”pathEnd
指令“如果请求路径已完全匹配,则仅将请求传递到其内部路由。”
来自 akka path-matchers,Segment
路径匹配器“如果不匹配的路径以路径段开头(即不是斜杠)则匹配。如果是这样,则提取路径段作为 String 实例。"