Пропагандировать / делегировать значение пути к дочерним маршрутам 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)
Другие вопросы по тегам