8

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?

Stefan Arentz
  • 34,311
  • 8
  • 67
  • 88
  • 2
    The link talks about POST data in www-form-urlencoded form. Your query is about query string. By the way, isn't it weird to pass same query string 3 times ;) – Ankur Mar 26 '13 at 11:31

2 Answers2

8

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

number23_cn
  • 4,611
  • 26
  • 31
0

I've never encountered this issue myself, but if it is indeed impossible to get a hold of the multiple values without manually parsing the URL yourself, it sounds like it's worth filing a bug report over at https://github.com/weavejester/compojure/. (Unless it's a feature.. There are some other things in Compojure and Clout that's a bit non-standard but highly convenient.)

August Lilleaas
  • 54,010
  • 13
  • 102
  • 111