Одной из особенностей Akka HTTP (ранее известного как Spray) является его способность автоматически сортировать и демаршалировать данные туда и обратно из json в классы case и т. д. Мне удалось заставить это хорошо работать.
На данный момент я пытаюсь сделать 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, содержащий параметры запроса, и заставить 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, но я действительно не хочу этого делать здесь.)