Dou*_*las 16 akka spray akka-http
Akka HTTP(正式名称为Spray)的一个特性是它能够自动编组和解组从json到案例类等的数据.我已经成功地使这个工作得很好.
目前,我正在尝试创建一个使用查询参数执行GET请求的HTTP客户端.代码目前看起来像这样:
val httpResponse: Future[HttpResponse] =
Http().singleRequest(HttpRequest(
uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/""" +
s"query?seq=${seq}" +
s"&max-mismatches=${maxMismatches}" +
s"&pam-policy=${pamPolicy}"))
Run Code Online (Sandbox Code Playgroud)
嗯,那不是那么漂亮.如果我可以传入一个包含查询参数的case类,并且让Akka HTTP自动生成查询参数,就像它对json一样.(另外,Akka HTTP的服务器端有一种解析GET查询参数的优雅方式,所以人们会认为它也会有一种优雅的方式来生成它们.)
我想做类似以下的事情:
val httpResponse: Future[HttpResponse] =
Http().singleRequest(HttpRequest(
uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/query""",
entity = QueryParams(seq = seq, maxMismatches = maxMismatches, pamPolicy = pamPolicy)))
Run Code Online (Sandbox Code Playgroud)
只是,上述实际上并不起作用.
我想用Akka HTTP以某种方式做什么?或者我只是需要以老式的方式做事?即,显式生成查询参数,就像我在上面的第一个代码块中一样.
(我知道如果我要将其从GET更改为POST,我可能会让它更像我希望它工作,从那时起我可以从案例中自动转换POST请求的内容上课到json,但我真的不想这样做.)
cmb*_*ter 26
您可以利用该Uri课程来完成您想要的任务.它提供了多种方法来使用该withQuery方法将一组参数传递到查询字符串中.例如,你可以这样做:
val params = Map("foo" -> "bar", "hello" -> "world")
HttpRequest(Uri(hostAndPath).withQuery(params))
Run Code Online (Sandbox Code Playgroud)
要么
HttpRequest(Uri(hostAndPath).withQuery(("foo" -> "bar"), ("hello" -> "world")))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9765 次 |
| 最近记录: |