ring.middleware和compojure:params with keywords

pic*_*ick 3 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))))
Run Code Online (Sandbox Code Playgroud)

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

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

Dan*_*ero 5

wrap-keyword-params中间件应该在wrap-params和之后运行wrap-multipart-params,所以你的应用应该如下所示:

(def app
  (-> (routes home/my-routes)
      (wrap-keyword-params)
      (wrap-cookies)
      (wrap-params)
      (wrap-multipart-params))))
Run Code Online (Sandbox Code Playgroud)