我有一個defresource,這應該採取POST請求,驗證請求主體:malformed-decision,將主體保存到數據庫中:post!-decision並返回保存的主體in:手柄創建。多個clojure解放者的決定讀取請求主體
(defn parse-project [context] (json/read-str
(slurp (get-in context [:request :body]))
:key-fn keyword))
(defresource add-new-project
:malformed? (fn[ctx] (not (project-is-valid (parse-project ctx))))
:handle-malformed (fn [_] (generate-string (str "Malformed json!")))
...
:post! (fn [ctx] (save-to-db (parse-project ctx))
:handle-created (fn [ctx] (... parse-project ...))
所以我的代碼讀取三次ByteArrayInputStream(來自:request:body)與slurp函數。第一次工作,但第二次調用slurp時,nil作爲參數傳遞並出現java.io.EOFException:JSON錯誤。我認爲讀者開始閱讀上次留下的位置。
我怎樣才能讀取請求的正文三次?或者,有沒有很好的方法可以將閱讀結果保存到變量中並將其傳遞給其他解放者決策?