在环服务器内部处理 http 请求时,请求数据的主体存储在 key 中的 request-hashmap 中:body。例如如下:
#object[org.eclipse.jetty.server.HttpInputOverHTTP 0x2d88a9aa "HttpInputOverHTTP@2d88a9aa"]
Run Code Online (Sandbox Code Playgroud)
如果我只对原始文本感兴趣,我如何读出这个对象?
您可以使用ring.util.request/body-string以字符串形式获取请求正文。
(body-string request)
Run Code Online (Sandbox Code Playgroud)
您需要记住,它InputStream只能被读取一次,因此您可能更喜欢用:body读取的替换原始文件,String以便您以后可以再次访问它:
(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))))))
Run Code Online (Sandbox Code Playgroud)
并添加您的中间件来包装您的处理程序:
(def app
(wrap-body-string handler))
Run Code Online (Sandbox Code Playgroud)