代字号~
用于在Akka HTTP中连接Route
。可能还有其他应用程序,但我的动机是希望使用~
运算符将路径集合转换为单个路径。
要做到这一点,有一个"零"可替代下面???
示例中foldLeft
的元素:
val routes: Seq[Route] = ...
val route = routes.foldLeft[Route](???)(_ ~ _)
所需的零将是~
的标识元素,它将是一个什么都不做的路由,只是将请求传递给串联中的下一个路由。但是,如何在代码中表示它?
我找到了pass
和Directive.Empty
指令,但这两个指令都包含内部路由,而不能自己成为路由。它们是可以包裹路线的指令,而我自己需要Route
。
答案 0 :(得分:1)
只要路由拒绝请求,串联链中的路由就会继续处理。如果第一个路由拒绝请求,则尝试下一个请求。这将持续到没有更多路由或路由接受请求(结束串联链)。
鉴于此,您识别的身份路线需要拒绝每个请求。 The built-in RouteDirective reject
就是这样做的。您的代码变为:
val routes: Seq[Route] = ...
routes.foldLeft[Route](reject)(_ ~ _)
注意:您的特定用例已由Akka HTTP提供。您无需自己编写fold
,而只需使用内置RouteConcatenation.concat
,如下所示:
val routes: Seq[Route] = ...
val route = concat(routes: _*)