【问题标题】:How to read query parameters in akka-http?如何读取akka-http中的查询参数?
【发布时间】:2017-02-07 09:17:13
【问题描述】:

我知道在处理请求时将 akka-http 库编组和解组到类类型。但是现在,我需要阅读 GET 请求的请求参数。我尝试了parameter() 方法,它返回ParamDefAux 类型,但我需要这些值作为字符串类型

我检查以下问题的答案。

  1. How can I parse out get request parameters in spray-routing?

  2. Query parameters for GET requests using Akka HTTP (formally known as Spray)

但不能做我需要的。

请告诉我如何从请求中提取查询参数。或者我如何从ParamDefAux中提取所需的值

请求网址

http://host:port/path?key=authType&value=Basic345

获取方法定义

 val  propName = parameter("key")
 val  propValue = parameter("value")
 complete(persistanceMgr.deleteSetting(propName,propValue))

我的方法声明

def deleteSetting(name:String,value:String): Future[String] = Future{
 code...
}

【问题讨论】:

  • 应该可以的,你试过了吗? path("query") { parameters('name.as[String]) {name => complete(name) } } ~

标签: scala akka-stream akka-http


【解决方案1】:

对于http://host:port/path?key=authType&value=Basic345 之类的请求,请尝试

path("path") {
  get {
    parameters('key.as[String], 'value.as[String]) { (key, value) =>
      complete {
        someFunction(key,value)
      }
    }
  }
}

【讨论】:

  • 为此,import akka.http.scaladsl.server.Directives._ 需要在那里。
  • 将键值对分隔为两个单独的查询参数是否正常做法(如您的示例所示)?另一种方法是,我们不使用名为“key”的查询参数,而是将其命名为 authType,并将其值设为 Basic345
  • 是否可以给参数默认值?
【解决方案2】:

即使在代码中不太明确,您也可以一次从上下文中提取所有查询参数。可以如下使用:

// Previous part of the Akka HTTP routes ...
extract(_.request.uri.query()) { params  =>
  complete {
    someFunction(key,value)
  }
}

【讨论】:

    【解决方案3】:

    如果您希望将query parameters 提取为一个片段

    extract(ctx => ctx.request.uri.queryString(charset = Charset.defaultCharset)) { queryParams =>
       //useyourMethod()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      相关资源
      最近更新 更多