Akka HTTP(以前称为Spray)的一个功能是能够自动将数据从JSON转换为案例类等,也可以自动将数据转换回JSON。我已经成功地使用这个功能。
目前,我正在尝试创建一个HTTP客户端,执行带有查询参数的GET请求。代码目前看起来像这样:
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}"))
嗯,这并不太好看。如果我只需要传入一个包含查询参数的case class,并且让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格式的案例类,但我这里并不真的希望这样做。)
Query
包装:.withQuery(Query(params)))
。 - akauppi