加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在Akka指令中提取路径头

发布时间:2020-12-16 18:45:59 所属栏目:安全 来源:网络整理
导读:我使用 akka directives来匹配特定的路径模式: /item/quantity 例子就是 /apples/100/bananas/200 可能的项目(例如“苹果”,“香蕉”,……)不是预先知道的,因此使用路径对项目进行硬编码不是一种选择. 但是,我找不到提取路径头部的PathMatcher.我正在寻找形
我使用 akka directives来匹配特定的路径模式:

/item/quantity

例子就是

/apples/100
/bananas/200

可能的项目(例如“苹果”,“香蕉”,……)不是预先知道的,因此使用路径对项目进行硬编码不是一种选择.

但是,我找不到提取路径头部的PathMatcher.我正在寻找形式的东西

val route = 
  get {
    path(PathHeadAsString) { item : String =>
      path(IntNumber) { qty : Int =>
        complete(s"item: $item quantity: $qty")
      } ~ complete("no quantity specified")
    } ~ complete("no item specified")
  }

哪里

Get("/apples/100") ~> route ~> check {
  responseAs[String] shouldEqual "item: apples quantity: 100"
}

有没有办法提取路径的第一段?

如果数量在路径中,则路径(段)匹配器将不匹配.

我显然可以使用路径(段)来获取路径元素的List [String],但是我必须手动提取列表头和列表尾部,这似乎是不优雅的.

提前感谢您的考虑和回应.

解决方法

你可以 compose PathMatchers with modifiers

path(Segment / IntNumber) { case (item,qty) =>
  complete(s"item: $item quantity: $qty")
}

或者,如果您需要完整的突破,请使用pathPrefix:

val route = 
pathPrefix(Segment) { item : String =>
  path(IntNumber) { qty : Int =>
    complete(s"item: $item quantity: $qty")
  } ~
  pathEnd { complete("no quantity specified") } ~
  complete("something else going on here")
} ~
complete("no item specified")

(注意那里附加的pathEnd指令;即便如此,我也不会说匹配的模式代表所有可能的情况.)

从akka routing directives开始:

> pathPrefix指令“在使用前导斜杠后,将给定的PathMatcher应用于剩余不匹配路径的前缀.”
> path指令“在使用前导斜杠后,将给定的PathMatcher应用于剩余的不匹配路径.”
> pathEnd指令“如果请求路径已完全匹配,则仅将请求传递给其内部路由.”

从akka path-matchers开始,Segment路径匹配器“匹配,如果不匹配的路径以路径段开始(即不是斜杠).如果是,则将路径段提取为String实例.”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读