将路径值传播/委托给子路由 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)