【问题标题】:How to get repeating request parameters in Compojure如何在 Compojure 中获取重复请求参数
【发布时间】:2013-03-16 03:45:50
【问题描述】:

我可以通过以下方式轻松获取请求参数:

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

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

【问题讨论】:

  • 该链接以 www-form-urlencoded 形式讨论 POST 数据。您的查询是关于查询字符串的。顺便说一句,传递相同的查询字符串 3 次是不是很奇怪;)

标签: clojure compojure


【解决方案1】:

使用标准的 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-11-23
      • 2013-10-02
      • 2018-12-11
      • 2020-11-28
      • 2010-10-24
      • 2011-08-27
      • 2017-10-21
      • 2021-01-12
      • 1970-01-01
      相关资源
      最近更新 更多