You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

akka-http应用routing DSL配置错误无法访问session路由及获取路径参数问题

路由404问题原因

你当前的session路由嵌套方式不符合Akka HTTP的路径匹配规则:

  • 外层的path("session")是全量匹配剩余路径,匹配/session路径后会直接清空剩余的路径片段,导致嵌套在内层的path("getByToken")没有可匹配的内容,因此访问/session/getByToken会返回404。如果要实现多层路径的嵌套匹配,外层应该用pathPrefix匹配路径前缀,保留剩余路径给内层路由处理。

支持路径参数的修改方案

要实现/session/getByToken/abc123abc123abc1234形式的调用,你可以通过Segment路径匹配器捕获尾部的token字符串参数,修改后的路由代码如下:

val boardRoutes =
  path("board") {
    get {
      complete("board#index route")
    }
  }

val sessionRoutes =
  concat(
    // 外层用pathPrefix匹配/session前缀,保留剩余路径给内层匹配
    pathPrefix("session") {
      concat(
        // 匹配getByToken + 字符串参数,将捕获的参数绑定到token变量
        path("getByToken" / Segment) { token =>
          get {
            // 这里可以直接使用拿到的token参数
            complete(s"session#load route, tokenId: $token")
          }
        },
        path("login") {
          post {
            complete("session#login route")
          }
        },
        path("logout") {
          delete {
            // 原代码此处返回内容有误,已修正为logout相关返回
            complete("session#logout route")
          }
        }
      )
    }
  )

val routes = chatRoute ~ boardRoutes ~ sessionRoutes

修改后即可正常使用目标调用方式,路由中可以直接通过绑定的token变量拿到传入的字符串参数。如果需要同时支持不带参数的/session/getByToken访问,额外加一条无参数的path("getByToken")匹配规则即可。

内容的提问来源于stack exchange,提问作者Blankman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:02