ring.middleware和compojure:params with keywords

时间:2014-10-01 22:34:42

标签: clojure compojure ring

在我的Web处理程序中,我定义了以下内容:

(:require ... 

[ring.middleware.cookies :refer [wrap-cookies]]
            [ring.middleware.multipart-params :refer [wrap-multipart-params]]
            [ring.middleware.params :refer [wrap-params]]
            [ring.middleware.keyword-params :refer [wrap-keyword-params]]
            [ring.middleware.content-type :refer [wrap-content-type]]
            [ring.middleware.format-response :refer [wrap-restful-response]
...)

(def app
  (-> (routes home/my-routes)
      (wrap-cookies)
      (wrap-params)
      (wrap-multipart-params)
      (wrap-keyword-params))))

一切正常。使用看起来像“../test?foo=123”的URL测试卷曲给我一个看起来像{:foo 123}的参数图。但是,显示为关键字的实际上是一个字符串:( keyword?:foo)返回false。

我已经尝试重新安排处理程序并逐个删除它们,但无济于事。是否有关于compojure的东西将关键字转换回字符串?感谢

1 个答案:

答案 0 :(得分:5)

wrap-keyword-params中间件应该在wrap-paramswrap-multipart-params之后运行,因此您的应用应该如下所示:

(def app
  (-> (routes home/my-routes)
      (wrap-keyword-params)
      (wrap-cookies)
      (wrap-params)
      (wrap-multipart-params))))