Как я могу разобрать параметры запроса в распылительной маршрутизации?

Вот как выглядит код кода

    get{
      respondWithMediaType(MediaTypes.`application/json`){
          entity(as[HttpRequest]){
            obj => complete{


                println(obj)
                "ok"
            }
          }
      }
    }~

Я могу сопоставить запрос к объекту spray.http.HttpRequest, и я могу извлечь uri из этого объекта, но я полагаю, что есть более простой способ проанализировать параметры в запросе на получение, чем делать это вручную.

Например, если мой запрос на получение

 http://localhost:8080/url?id=23434&age=24

Я хочу получить идентификатор и возраст из этого запроса

Ответы

Ответ 1

На самом деле вы можете сделать это намного лучше. В маршрутизации есть две директивы: parameter и parameters, я думаю, разница размыта, вы также можете использовать некоторые модификаторы: ! и ?. В случае ! это означает, что этот параметр должен быть предоставлен или запрос будет отклонен, а ? возвращает параметр, поэтому вы можете указать параметр по умолчанию в этом случае. Пример:

val route: Route = {
  (path("search") & get) {
    parameter("q"!) { query =>
      ....
    }
  }
}

val route: Route = {
  (path("search") & get) {
    parameters("q"!, "filter" ? "all") { (query, filter) => 
      ...
    }
  }
}