akka-http:如何提取查询参数列表

akka-http: How to extract list of query paramerters

在 akka-http 中,我们如何从传入请求中提取不同长度的查询参数列表?

请求url可以这样:

.../employees?city=london,ny,paris

每个请求的城市数量可能会有所不同。

得到它作为:

path("searchByCity") {
        get {
          parameters(Symbol("city").*) {cities =>
            .....
          }
        }
      }

URL 现在是:

.../employees?city=london&city=ny&city=paris
function getQueryParams(url){
   let urlParts = url.split('?');

   if(urlsParts?.length > 1){
    let params = urlParts[1].split('&');
    return params
   }
  return null
}

var queryParams = getQueryParams('.../employees?city=london,ny,paris')

根据您的解决方案,您可以将 Symbol 部分替换为

parameters("city".repeated)

the akka doc

如果您想将您的值保留为逗号分隔的值列表,您可以创建一个自定义指令,例如

    def paramAsList(key: String): Directive1[List[String]] =
        parameter(key)
          .map(x => x.split(",").toList)

...

    get {
         paramAsList("city") => cities {
....

有了这个,你的 url .../employees?city=london,ny,paris 应该可以工作了