scala – 如何匹配Akka HTTP中的所有路径
大多数Akka HTTP示例显示使用路径定义路由非常容易.
我有以下(略微简化)来自introductory example, val route = path("hello") { complete( HttpEntity( ContentTypes.`text/html(UTF-8)`,"<h1>Say hello to akka-http</h1>")) } 但是,上面只适用于“/ hello”,我想匹配所有可能的路径或URL,而不仅仅是“你好”.空字符串“”仅匹配根路径,“*”匹配文字路径“/ *”.路径的参数是必需的,不能简单地省略. 解决方法
有很多方法可以实现.我相信以下显示了一些最优先选择的方式.
使用其他类型的指令 最简单的解决方案需要知道路由可以是任何Directive,而不仅仅是path directives. val route = complete( HttpEntity( ContentTypes.`text/html(UTF-8)`,"<h1>Say hello to akka-http</h1>")) 使用带路径的其他PathMatcher path实际上并不将String作为参数. path(“hello”)实际上是隐式转换后的pathPrefix(_segmentStringToPathMatcher(“hello”)).使用PathMatcher类型的不同参数可以获得所需的结果. 您可以使用剩余的剩余部分. val route = path(Remaining) { _ => complete( HttpEntity( ContentTypes.`text/html(UTF-8)`,"<h1>Say hello to akka-http</h1>")) } 或者您可以使用正则表达式: val route = path(".*".r) { _ => complete( HttpEntity( ContentTypes.`text/html(UTF-8)`,"<h1>Say hello to akka-http</h1>")) } 以上两个都使匹配成为可能,因此您有另外忽略的lambda参数. 使用pathPrefix(“”)而不是路径(“”) 根据the documentation for val route = pathPrefix("") { complete( HttpEntity( ContentTypes.`text/html(UTF-8)`,"<h1>Say hello to akka-http</h1>")) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |