我的问题是,我如何才能习惯性地读取戒指请求的主体,如果它已被阅读?阅读戒指请求正文当已经阅读
这是背景。我正在为Ring应用程序编写错误处理程序。发生错误时,我想记录错误,包括可能需要重现并修复错误的所有相关信息。一个重要的信息是请求的主体。但是,:body
值的状态(因为它是一种java.io.InputStream
对象)会导致问题。
具体来说,什么情况是,一些中间件(在ring.middleware.json/wrap-json-body
中间件在我的情况)确实身体InputStream
对象,这会改变对象的内部状态,使得以slurp
返回一个空字符串未来调用上slurp
。因此,请求地图中的[body]内容有效丢失。
我能想到的唯一解决方案是在身体可以被阅读之前抢先复制身体InputStream
对象,以防万一我以后可能需要它。我不喜欢这种方法,因为在每个请求上做一些工作似乎很笨拙,以防万一以后出现错误。有更好的方法吗?
我采取的方法是基于'tee-stream'。感谢你,并''groundhog'。我接受了这个答案,我将在单独的答案中详细说明我的方法。 –