2011-09-19 68 views
0

我們正在使用Spring MVC(3.0.5)來構建我們正在構建的API。但是,我們發現應用程序並不總是在響應頭中返回一個內容長度。爲什麼我還沒有弄清楚。我們無法手動設置控制器中的內容長度(request.setContentLength(x)),因爲我們只在我們的Freemarker視圖中使用控制器獲得的數據的子集。所以基本上我們需要的是計算並設置之後的內容長度一個視圖已被解析/編譯和之前它實際上被髮送到客戶端。如何使用spring mvc解析視圖後設置內容長度?

是否有任何常見的(「良好的實踐」)方法來做到這一點?甚至「醜陋」的方式?

回答

2

通過實施HandlerInterceptor接口攔截您的請求。 afterCompletion方法在視圖解析後運行,因此您應該可以在該處設置值,因爲該方法的簽名通過了HttpServletResponse。配置正是如此:

<!-- Configures Handler Interceptors -->  
<mvc:interceptors> 
    <bean class="com.myapp.web.interceptor.MyInterceptor" /> 
</mvc:interceptors> 

下面是一些基本的代碼:

@Component 
public class MyInterceptor implements HandlerInterceptor { 
} 
+0

酷!此時是否有權訪問已解決的視圖?爲了讓我計算內容長度 – Skurpi

+0

我相信是這樣的,因爲afterCompletion方法在所有處理程序和視圖處理完成之後運行。請參閱http://stackoverflow.com/questions/5435351/determine-size-of-http-response,David的答案是如何獲得響應的大小。 – atrain

+0

實際上,這是行不通的,因爲攔截器方法postHandle將在解析和發送視圖之前運行,afterCompletion將在視圖解析併發送後運行。使用此解決方案時沒有任何內容 – Skurpi

相關問題