Как получить повторяющиеся параметры запроса в Compojure

Я могу легко получить параметры запроса с помощью:

(:foo params)

Однако, когда у меня есть такой запрос:

/api?foo=1&foo=2&foo=3

Я получаю только "3", в то время как я ожидаю массив ["1","2","3"].

Я не уверен, почему это происходит, потому что, когда я смотрю на код в:

https://github.com/ring-clojure/ring-codec/blob/master/src/ring/util/codec.clj#L128

Кажется, он вызывает assoc-conj, который должен превратить несколько параметров с одинаковым именем в вектор, содержащий значения.

Я что-то пропустил здесь или это ошибка?


person Stefan Arentz    schedule 26.03.2013    source источник
comment
Ссылка говорит о данных POST в форме www-form-urlencoded. Ваш запрос касается строки запроса. Кстати, не странно ли передавать одну и ту же строку запроса 3 раза;)   -  person Ankur    schedule 26.03.2013


Ответы (2)


используйте стандартную форму деструктурирования Clojure:

(GET "/api" {{:strs [foo]} :query-params} (str foo))

curl "http://localhost:3000/api?foo=1&foo=2&foo=3" 
==> ["1" "2" "3"]

документ: https://github.com/weavejester/compojure/wiki/Destructuring-Syntax

person number23_cn    schedule 02.04.2013

Я сам никогда не сталкивался с этой проблемой, но если действительно невозможно получить несколько значений без ручного разбора URL-адреса самостоятельно, похоже, стоит отправить отчет об ошибке по адресу https://github.com/weavejester/compojure/. (Если только это не функция. В Compojure и Clout есть и другие вещи, немного нестандартные, но очень удобные.)

person August Lilleaas    schedule 02.04.2013