2011-10-03 21 views
0

我正試圖爲我們的客戶端訪問API時構建一個簡單的日誌記錄系統。我們使用Spring來連接控制器和處理程序。我正在研究Spring的Interceptor功能來編寫postHandle()方法。不幸的是,與我在這裏看到的所有代碼示例不同,例如,HttpServletResponse沒有getStatus()方法。我假設我們正在使用錯誤版本的Java或其他東西。從HTTPServletResponse獲取正文和響應代碼

我們需要來自HttpServletResponse對象的主體和響應代碼:如何獲取這些對象?

編輯:我們去與一個過濾器:

public void doFilter(
    ServletRequest request, 
    ServletResponse response, 
    FilterChain chain) throws IOException, ServletException { 

    RichHttpServletResponse richResponse=new RichHttpServletResponse((HttpServletResponse)response); 
    chain.doFilter(request, richResponse); 
} 

RichHttpServletResponse需要servlet響應作爲其構造器的自變量和覆蓋的一些方法,如sendError()和通過對實際傳遞值servlet響應。 webmvc-config XML看起來像這樣:

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy"> 
    <sec:filter-chain-map path-type="ant"> 
    <sec:filter-chain pattern="/**" 
     filters="requestObjectFilter" /> 
    </sec:filter-chain-map> 
</bean> 

下面的bean爲def。

+1

你的問題是雙重的。這複製您的第一個問題:http://stackoverflow.com/questions/3242236/capture-and-log-the-response-body這複製您的第二個問題:http://stackoverflow.com/questions/1302072/how-can -i-得到最HTTP狀態代碼-OUT-OF-A-ServletResponse的-IN-A-ServletFilter中 – BalusC

回答

0

你可能會調用getOutputStream()並讀取它,但我會擔心它搞砸了流。有一些重置方法,但我不熟悉他們自己做什麼。