【发布时间】:2013-12-31 11:28:13
【问题描述】:
我的问题是,如果 Ring 请求的正文已被读取,我该如何以惯用方式读取它?
这是背景。我正在为 Ring 应用程序编写错误处理程序。发生错误时,我想记录错误,包括我可能需要重现和修复错误的所有相关信息。一项重要的信息是请求的正文。但是,:body 值的状态性(因为它是 java.io.InputStream 对象的一种类型)会导致问题。
具体来说,发生的情况是某些中间件(在我的例子中是 ring.middleware.json/wrap-json-body 中间件)在主体 InputStream 对象上执行 slurp,这会更改对象的内部状态,以便将来调用 slurp返回一个空字符串。因此,主体的 [content of the] 实际上从请求映射中丢失了。
我能想到的唯一解决方案是在可以读取主体之前抢先复制主体InputStream 对象,以防我以后可能需要它。我不喜欢这种方法,因为以防万一以后可能出现错误,对每个请求都做一些工作似乎很笨拙。有更好的方法吗?
【问题讨论】: