Akka HTTP(以前称为 Spray)的特性之一是它能够自动地从 json 到 case 类等中来回编组和解组数据。我已经成功地让它运行良好。
目前,我正在尝试制作一个使用查询参数执行 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,但我真的不想在这里这样做。)