如何在Akka HTTP请求中访问请求的完整路径?

时间:2017-01-13 05:11:13

标签: scala akka-http

在某些情况下,我可以使用PathDirective在剩余路径上进行匹配,以获取有关路径的所需信息。例如,当下面的route由Akka HTTP直接绑定和处理时,每个请求都会根据需要回显请求的路径。

val route =
  path(Remaining) { path =>
    complete(path)
  }

但是,当上述路由在应用程序的其他位置组合时,上面的path变量可能只保留部分请求的路径,而不会产生所需的结果。

例如,如果实际绑定路线是,

val actualRoute = pathPrefix("echo") { route }

给予用户的响应中将缺少整个路径的“echo /”部分。

如何可靠地访问完整路径?

1 个答案:

答案 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指令得到的输出一致。