Scala Akka HTTP 向 API URL 路由添加多个段变量的问题

问题描述 投票:0回答:1

我正在构建一个 API 来使用 Scala、Akka HTTP 和 Akka Actors 跟踪学生数据。

但是下面的 API 路由没有给我想要的结果。

路线

littlerock/admins
littlerock/schools/1
按预期工作,但其余路线显示错误
The requested resource could not be found

我希望 API 如下所示。

所有学区管理员 - GET:http://localhost:8080/littlerock/admins

学校的详细信息 - GET:http://localhost:8080/littlerock/schools/{1}

学校的所有学生 - GET:http://localhost:8080/littlerock/schools/{1}/students

学生的详细信息 - GET:http://localhost:8080/littlerock/schools/{1}/students/{1}

学生的所有同学 - GET:http://localhost:8080/littlerock/schools/{1}/students/{1}/classmates

学生的同学详细信息 - GET:http://localhost:8080/littlerock/schools/{1}/students/{1}/classmates/{1}

你能帮我解决这个问题吗!

提前致谢!

路线代码如下所示:


  val schoolRoutes: Route =
    pathPrefix("littlerock") {
    concat(

    pathPrefix("admins") {
      concat(
        pathEnd {
          concat(
            get {
              complete("District administrators.")
            })
        })
    },

    pathPrefix("schools") {
      concat(
        path(Segment) { name =>
          concat(
            pathEnd {
            get {
              rejectEmptyResponse {
                  complete("A school's details.")
              }
            }
            },
            path("students") {
              concat(
                pathEnd {
                  get {
                    rejectEmptyResponse {
                      complete("All students")
                    }
                  }
                },
                path(Segment) { name =>
                  concat(
                    pathEnd {
                    get {
                      rejectEmptyResponse {
                        complete("A student's details")
                      }
                    }},
                    path("classmates") {
                      concat(
                        pathEnd {
                          get {
                            rejectEmptyResponse {
                              complete("A student's classmates.")
                            }
                          }
                        },
                        path(Segment) { name =>
                          concat(
                            get {
                              rejectEmptyResponse {
                                complete("A classmate's details.")
                              }
                          })
                        }
                      )
                    }
                  )
                }
              )
            }
          )
      })
    }
  )}

scala akka akka-http
1个回答
0
投票

原因是

path(...)
与剩下的完整请求路径匹配,但是如果您在不想匹配完整路径的地方使用
pathPrefix(...)
来代替,那么您正在使用它来尝试匹配路径的前缀到最后应该对其进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.