scala - 我想缩短 Akka Http 中的路由

标签 scala akka akka-http

我是 Akka HTTP 的新手,我想为此创建路由 -> server/company/:company/authority/:authority/user/:user/region/:region/:regionId/:planTypes

我做了这样的路线->

val route: Route = get {
          pathPrefix("/server") {
            pathPrefix("/company") {
              parameter('company) { company =>
                pathPrefix("/authority") {
                  parameter('authority) { authority =>
                    pathPrefix("user") {
                      parameter('user) { user =>
                        pathPrefix("region") {
                          parameters('region, 'regionId, 'planType) {
                            (region, regionId, planType) =>
                              comleteRequest(tenant, authority, user, region, regionId, planType)
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }

但这看起来很难看。有没有更好更短的写法。

最佳答案

您可以使用:

path("a" / IntNumber / "b" / IntNumber / "c") { 
   (a, b) => _.complete((a + b).toString)
} ~

然后,这样调用它:

http://localhost:8080/a/1/b/2/c

将返回 3

此处有更多路径匹配器详细信息:https://doc.akka.io/docs/akka-http/current/routing-dsl/path-matchers.html

斜杠运算符将连接两个匹配器并在它们之间插入斜杠。您可以将路径段与文字字符串(如 server)或提取器(如 RegExLongNumber 等)匹配。每个提取器都会提供一个值,因此在我的示例我使用 2 个 int 提取器并使用 lambda (a, b) 将传递 2 个 int。

关于scala - 我想缩短 Akka Http 中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70677075/

相关文章:

Scala 类的多重继承

scala - akka中的死信箱可以重复使用吗?

scala - 在 Scala 中拦截套接字关闭上的 Akka HTTP WebSocket 事件

scala - 如何从 akka Source[ByteString, _] 中提取 Future[String]?

java - Akka-HTTP 服务器 HTTPS 支持

scala - 由于公共(public) pom 文件不正确,SBT 无法解析 fakehttpserver 依赖项

Scala-zip 与 future

scala - 如何在akka中将类T对象转换为Future[T]对象

scala - 异常字符串插值不替换变量

multithreading - Option [Object]上的Scala匹配未完全包含Some(o),Akka中没有None接收函数