我的問題是,我如何才能習慣性地讀取戒指請求的主體,如果它已被閱讀?閱讀戒指請求正文當已經閱讀
這是背景。我正在爲Ring應用程序編寫錯誤處理程序。發生錯誤時,我想記錄錯誤,包括可能需要重現並修復錯誤的所有相關信息。一個重要的信息是請求的主體。但是,:body
值的狀態(因爲它是一種java.io.InputStream
對象)會導致問題。
具體來說,什麼情況是,一些中間件(在ring.middleware.json/wrap-json-body
中間件在我的情況)確實身體InputStream
對象,這會改變對象的內部狀態,使得以slurp
返回一個空字符串未來調用上slurp
。因此,請求地圖中的[body]內容有效丟失。
我能想到的唯一解決方案是在身體可以被閱讀之前搶先複製身體InputStream
對象,以防萬一我以後可能需要它。我不喜歡這種方法,因爲在每個請求上做一些工作似乎很笨拙,以防萬一以後出現錯誤。有更好的方法嗎?
我採取的方法是基於'tee-stream'。感謝你,並''groundhog'。我接受了這個答案,我將在單獨的答案中詳細說明我的方法。 –