2014-01-09 83 views
2

我已经写了一个使用spring从HTTPServletRequest中读取请求体的preHandle方法中的拦截器。请求正文包含json。我也可以读取请求主体,但请求对象发生了一些情况,请求主体变得空白。而由于这个请求正在变成一个不好的请求。任何帮助都感激不尽。提前致谢。Java拦截器读取请求主体使请求为空

+1

身体只能读取一次读取,你不能再读它。为什么你在'preHandle'方法内的拦截器中读取它? –

+1

我想记录它。 – Ritesh

+0

如果你看起来更难一点,你可能会发现已经有一个拦截器会记录请求和响应。 – Sikorski

回答

3

我没有使用JEE拦截器或Spring拦截器,也不知道它们是如何工作的。

但它听起来像更简单的方法是去过滤器(从web.xml配置)。由于过滤器在链中互相调用,因此可以轻松地替换使用包装的HttpServletRequest对象(提供正文的地方)转发的HttpServletRequest对象。

这可能可以通过创建一个你自己的类来实现,扩展HttpServletRequestWrapper,然后重写适当的方法(getInputStream听起来像这里的方式,是吗?)。

然后,您的getInputStream版本将返回您已阅读的正文的ByteArrayInputStream,或者您感觉适合的任何类型的InputStream。