在某些情况下,我可以使用PathDirective在剩余路径上进行匹配,以获取有关路径的所需信息。例如,当下面的route
由Akka HTTP直接绑定和处理时,每个请求都会根据需要回显请求的路径。
val route =
path(Remaining) { path =>
complete(path)
}
但是,当上述路由在应用程序的其他位置组合时,上面的path
变量可能只保留部分请求的路径,而不会产生所需的结果。
例如,如果实际绑定路线是,
val actualRoute = pathPrefix("echo") { route }
给予用户的响应中将缺少整个路径的“echo /”部分。
如何可靠地访问完整路径?
答案 0 :(得分:1)
Directives extractMatchedPath
and extractUnmatchedPath
允许您访问路径,而不像上面的path
指令那样匹配路径。这两个可以组合起来构建完整路径:
val route =
extractMatchedPath { matched =>
extractUnmatchedPath { unmatched =>
complete((matched.dropChars(1) ++ unmatched).toString)
}
}
然而,直接从URI中提取Path
可能更简洁:
val route =
extractUri { uri =>
complete(uri.toRelative.path.dropChars(1).toString)
}
请注意,在这两种情况下,我们都需要调用.dropChars(1)
来删除初始正斜杠,并与使用path
指令得到的输出一致。