2014-01-09 85 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。