将路径值传播/委托给子路由akka http

时间:2016-09-04 11:12:13

标签: scala akka spray 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 个答案:

答案 0 :(得分:2)

最佳实践建议只是嵌套路线,以便您仍然可以从外部路径访问值,如下所示:

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)