Пропагандировать / делегировать значение пути к дочерним маршрутам 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")
}
}
}
}
}
Спасибо
1 ответ
Решение
Лучшее практическое предложение - просто вкладывать маршруты, чтобы вы могли получить доступ к значению из внешнего маршрута, например так:
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)