如何使用Compojure获取POST请求的所有参数

时间:2015-08-29 09:17:55

标签: clojure compojure ring

根据Compojure documentation on routes,我可以轻松获得这样的个别参数:

(POST "/my-app" [param1 param2]
  (str "<h1>Hello " param1 " and " param2 "</h1>"))

如何获取 所有 参数,而不仅仅是个别参数?

3 个答案:

答案 0 :(得分:6)

compojure处理程序接收整个请求映射作为其参数,因此handler也可以访问所有参数。例如,要查看整个请求:

(POST "/" request
    (str request))

或者,提取所有表单参数:

(POST "/" request
    (str (:form-params request)))

问题中使用的语法是特定于组件的destructuring syntax,它允许从请求中提取单个参数。这类似于clojure通常的解构语法,并且,与通常的解构一样,compjure的解构也允许混合解构并仍然得到整个请求:

(POST "/" [param1 param2 :as request]
        (str (:form-params request)))

或者,提取已命名的所有&#34;其他&#34;参数:

(POST "/" [param1 param2 & more-params]
        (str more-params))

答案 1 :(得分:3)

我猜想将& params放在向量中并且有效:

(POST "/my-app" [& params]
  (str "<h1>Hello " params "</h1>"))

答案 2 :(得分:0)

类似这样的东西返回所有参数:

(POST "/test" {params :params} 
    (str "POST params=" params))

使用此符号访问特定参数:

(println (params :Nom))