如何在Compojure中获取重复的请求参数

时间:2013-03-26 11:07:34

标签: clojure 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,它应该将同名的多个参数转换为包含值的向量。

我在这里遗漏了什么或这是一个错误吗?

2 个答案:

答案 0 :(得分:7)

使用标准的Clojure解构表:

(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

答案 1 :(得分:0)

我自己从未遇到过这个问题,但是如果没有自己手动解析网址确实无法获得多个值,那么听起来好像是在https://github.com/weavejester/compojure/提交错误报告。 (除非它是一个功能..在Compojure和Clout中还有一些其他的东西,有点非标准但非常方便。)