我有一个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错误。我认为读者开始阅读上次留下的位置。
我怎样才能读取请求的正文三次?或者,有没有很好的方法可以将阅读结果保存到变量中并将其传递给其他解放者决策?