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}"))
嗯,那不太漂亮。如果我可以传入一个包含查询参数的案例类,并让 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)))
只是,上面的方法实际上不起作用。
我想要的东西可以通过 Akka HTTP 实现吗?或者我只需要以老式的方式做事?即,显式生成查询参数,就像我在上面的第一个代码块中所做的那样。
(我知道,如果我将其从 GET 更改为 POST,我可能可以让它更像我希望的那样工作,从那以后我可以获取从案例自动转换的 POST 请求的内容类到 json,但我真的不想在这里这样做。)
您可以利用Uri
类做你想做的事。它提供了多种方法来使用以下方法将一组参数放入查询字符串中:withQuery
方法。例如,您可以执行以下操作:
val params = Map("foo" -> "bar", "hello" -> "world")
HttpRequest(Uri(hostAndPath).withQuery(params))
Or
HttpRequest(Uri(hostAndPath).withQuery(("foo" -> "bar"), ("hello" -> "world")))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)