リングサーバー内でhttpリクエストを処理する場合、リクエストデータの本体はキーのrequest-hashmapに格納されます。たとえば、以下のように:ring:httpリクエストの本文を文字列として読み取る
#object[org.eclipse.jetty.server.HttpInputOverHTTP 0x2d88a9aa "[email protected]"]
場合、私は生のテキストで、ちょうど興味が、私はこのオブジェクトを読み取りますか?
リングサーバー内でhttpリクエストを処理する場合、リクエストデータの本体はキーのrequest-hashmapに格納されます。たとえば、以下のように:ring:httpリクエストの本文を文字列として読み取る
#object[org.eclipse.jetty.server.HttpInputOverHTTP 0x2d88a9aa "[email protected]"]
場合、私は生のテキストで、ちょうど興味が、私はこのオブジェクトを読み取りますか?
ring.util.request/body-string
を使用すると、要求本文をStringとして取得できます。
String
で元
:body
を交換好むかもしれないので、
InputStream
は一度しか読み取ることができることを覚えておく必要があり
(body-string request)
:
(defn wrap-body-string [handler]
(fn [request]
(let [body-str (ring.util.request/string-body request)]
(handler (assoc request :body body-str)))))
をそして、あなたのミドルウェアを追加あなたのハンドラをラップする:
(def app
(wrap-body-str handler))
はリング要求の:body
はのインスタンスでなければなりません。 これで、reader + slurpを使用して文字列を取り出すことができます。
(defn is->str [is]
(let [rdr (clojure.java.io/reader is)]
(slurp rdr)))
使用法:(is->str (:body request))