6

我的 Compojure Web 应用程序 ([compojure "1.0.1"]) 总是收到一个空的参数映射,尽管添加了 wrap-params 等。下面的代码示例:

(defroutes public-routes
  (PUT "/something" {params :params}
      (println (str "Params: " params))
      (do-put-something params)))

(def myapp 
  (-> public-routes
      ring-params/wrap-params))

(defn start-server []
  (future (jetty/run-jetty (var myapp) {:port 8080})))

我尝试添加 wrap-params、wrap-keyword-params 和 wrap-multipart-params 但是当我使用httpie(或我的客户端)将 PUT 到端点时,我发现 params 始终为空。任何人都可以帮忙吗?

谢谢!

4

1 回答 1

1

您的示例代码的唯一问题是它在路由正文中缺少环响应哈希映射。解决方案是评估为响铃响应,而不是使用 println。当您在路由中调用 println 时,它会打印到服务器进程正在运行的标准输出,这与对 API 调用的响应无关。

(defroutes public-routes
  (PUT "/something" {params :params}
    {:status 200
     :body (str "Params: " params)}))

这会产生一个 200 响应Params: {"foo" "bar"}作为响应正文。

我正在使用它来测试您的 PUT 路线:

curl -X PUT -d "foo=bar" http://127.0.0.1:8080/something
于 2012-10-21T17:04:17.030 回答