0
內部彈簧控制器寫入一個Excel流成響應彈簧攔截器讀取應答的OutputStream
HSSFWorkbook workbook = getWorkbook();
OutputStream out = response.getOutputStream();
response.setHeader("pragma", "public");
response.setHeader("Cache-Control", "public");
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=sampleexcel.xls");
workbook.write(out);
out.close();
// response.flushBuffer();
按照此鏈接How to read and copy the HTTP servlet response output stream content for logging implementated ResponseWrapper此類。 下面是攔截器的代碼,
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
HttpServletResponseCopier resp= new HttpServletResponseCopier(response) ;
byte[] responseData = resp.getCopy();
System.out.println("length "+responseData.length); // its 0 bytes
}
基本上要閱讀的內容的OutputStream到一個臨時文件。然後在其中添加加密信息。最後把這個加密文件寫入響應流。 在上面的代碼中,resp.getCopy()是空的,因此它將0字節寫入臨時文件。
任何指針什麼是錯的。是否有替代方法來實現這一點。
春季3.1,JDK 1.7
感謝您的信息。最初實施了簡單的過濾器並在web.xml中進行了配置,但是在控制器方法退出後並未調用它。可能是彈簧內部過濾器層次結構不調用此過濾器或過濾器鏈中的排序錯誤。在這個方向上的任何指針將不勝感激 – Aarati
純過濾器直接由servlet容器調用,並且通常與spring-mvc無關。但它應該被稱爲* around * spring-mvc DispatcherServlet:'void doFilter(...){/ *在servlet */chain.doFilter(...)之前;/*在servlet之後* /}'。再次閱讀鏈接帖子中的答案... –
最後,TeeOutputStream工作來獲取servletoutputstream。感謝這篇文章https://stackoverflow.com/questions/10457963/spring-rest-service-retrieving-json-from-request – Aarati