How to get repeating request parameters in Compojure

clojure, compojure

Solution

use a standard Clojure destructuring form:

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

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

doc: https://github.com/weavejester/compojure/wiki/Destructuring-Syntax

Problem

I can get to the request parameters easily with: ``` (:foo params) ``` However, when I have a request like this: ``` /api?foo=1&foo=2&foo=3 ``` I only get back `"3"` while I would expect an array `["1","2","3"]`. I'm not sure why this is happening because when I look at the code in: https://github.com/ring-clojure/ring-codec/blob/master/src/ring/util/codec.clj#L128 It seems to call `assoc-conj` which is supposed to turn multiple params of the same name into a vector containing the values. Am I missing something here or is this a bug?

Original source