我正在构建一个 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.")
}
})
}
)
}
)
}
)
}
)
})
}
)}
原因是
path(...)
与剩下的完整请求路径匹配,但是如果您在不想匹配完整路径的地方使用 pathPrefix(...)
来代替,那么您正在使用它来尝试匹配路径的前缀到最后应该对其进行排序。