clojure - Compojure 路由参数为空

标签 clojure compojure

尽管添加了换行参数等,我的 Compojure Web 应用程序 ([compojure "1.0.1"]) 始终收到空参数映射。代码示例如下:

(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 始终为空。有人可以帮忙吗?

谢谢!

最佳答案

示例代码的唯一问题是它在路由主体中缺少环响应 HashMap 。解决方案是评估响铃响应而不是使用 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

关于clojure - Compojure 路由参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12990634/

相关文章:

clojure - 生成 Java 类

lisp - 哪个更好? : (reduce + . ..) 或(应用 + ...)?

cookies - 如何使用 compojure 设置和获取 cookie?

clojure - 有没有办法在compojure中进行热装?

multithreading - 原子映射内的 Clojure Promise

multithreading - Clojure 的 Atom 的 Scala 等价物是什么?

deployment - 如何在 Apache 中集成 Clojure Web 应用程序

clojure - 如何从(尝试)表达式中返回环路由的响应正文?

macros - 可以放心地忽略宏和内置宏之间的区别吗?

在compojure中测试静态路由