将路径值传播/委托给子路由 akka http
Propagate / delegate path value to child routes akka http
我想要一个接收 IntNumber
的基本路由,并与数据库进行一些检查以了解值是否正确,然后如果值正确,我想将值传播到子路线。
基本路线
class BaseServiceRoute extends PathDirectives with SecurityDirectives {
val baseUserRoute = pathPrefix("user" / IntNumber)
}
如何检查 IntNumber 值并将值委托给子路由?指令?
子路由
class CategoryServiceRoute(implicit executionContext: ExecutionContext) extends BaseServiceRoute {
val route = baseUserRoute { userId =>
pathPrefix("category") {
pathEndOrSingleSlash {
get {
complete(s"$userId")
}
} ~
path(LongNumber) { categoryId =>
get {
complete(s"$categoryId")
} ~
post {
complete("Hello category post")
}
}
}
}
}
谢谢
最佳实践建议是嵌套路由,这样您仍然可以像这样从外部路由访问值:
pathPrefix("user" / IntNumber) { userId =>
pathPrefix("category") {
pathEndOrSingleSlash {
get {
complete(s"$userId")
}
}
}
}
但是,您似乎想将路线分成多个部分,这完全没问题。在那种情况下,只需将子路由设置为 def
:
def childRoute(userId: Int): Route =
pathPrefix("category") {
pathEndOrSingleSlash {
get {
complete(s"$userId")
}
}
}
然后像这样使用它:
baseUserRoute(childRoute)
我想要一个接收 IntNumber
的基本路由,并与数据库进行一些检查以了解值是否正确,然后如果值正确,我想将值传播到子路线。
基本路线
class BaseServiceRoute extends PathDirectives with SecurityDirectives {
val baseUserRoute = pathPrefix("user" / IntNumber)
}
如何检查 IntNumber 值并将值委托给子路由?指令?
子路由
class CategoryServiceRoute(implicit executionContext: ExecutionContext) extends BaseServiceRoute {
val route = baseUserRoute { userId =>
pathPrefix("category") {
pathEndOrSingleSlash {
get {
complete(s"$userId")
}
} ~
path(LongNumber) { categoryId =>
get {
complete(s"$categoryId")
} ~
post {
complete("Hello category post")
}
}
}
}
}
谢谢
最佳实践建议是嵌套路由,这样您仍然可以像这样从外部路由访问值:
pathPrefix("user" / IntNumber) { userId =>
pathPrefix("category") {
pathEndOrSingleSlash {
get {
complete(s"$userId")
}
}
}
}
但是,您似乎想将路线分成多个部分,这完全没问题。在那种情况下,只需将子路由设置为 def
:
def childRoute(userId: Int): Route =
pathPrefix("category") {
pathEndOrSingleSlash {
get {
complete(s"$userId")
}
}
}
然后像这样使用它:
baseUserRoute(childRoute)