clojure - ring:将 http 请求的正文读取为字符串

标签 clojure ring

在环形服务器内处理 http 请求时,请求数据的正文存储在请求 HashMap 中的键 :body 中。例如如下:

#object[org.eclipse.jetty.server.HttpInputOverHTTP 0x2d88a9aa "HttpInputOverHTTP@2d88a9aa"] 

如果我只对原始文本感兴趣,我如何读出这个对象?

最佳答案

您可以使用ring.util.request/body-string以字符串形式获取请求正文。

(body-string request) 

您需要记住 InputStream 只能读取一次,因此您可能更愿意用读取的 String 替换原始 :body ,这样您稍后可以再次访问它:

(defn wrap-body-string [handler]
  (fn [request]
    (let [body-str (ring.util.request/body-string request)]
      (handler (assoc request :body (java.io.StringReader. body-str))))))

并添加中间件来包装您的处理程序:

(def app
  (wrap-body-string handler))

关于clojure - ring:将 http 请求的正文读取为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37397531/

相关文章:

clojure - 设置环防伪 CSRF header token

clojure - 使用 ring/compojure 提供静态文件 - 来自 war

clojure - Clojure 中的 dissoc 无法开始工作

java - 为多语言项目配置 Maven 源目录

session - 在 Pedestal 中设置和使用基于 cookie 的 session

redirect - Compojure/Clojure 路由错误

clojure - 环防伪中间件是否可以有条件应用?

java - 使用 Maven + Java + Clojure 确保良好的安全性/代码签名

clojure - 使用 core.async pub/sub 时如何避免丢失项目?

clojure - Compojure 应用程序默认不发送 CSRF