Innenfeder Controller schreibt eine Excel-Strom in ReaktionFrühling Abfangjäger lesen Antwort Output
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();
Gemäß diesem Link How to read and copy the HTTP servlet response output stream content for logging implementated responsewrapper. Im Folgenden finden Sie Code Interceptor,
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
}
Grundsätzlich ist die Output Inhalt in eine temporäre Datei lesen möchten. Fügen Sie dann Verschlüsselungsinformationen hinzu. Schreiben Sie diese verschlüsselte Datei schließlich in den Antwortstream. Im obigen Code ist resp.getCopy() leer und schreibt daher 0 Bytes in die temporäre Datei.
Irgendwelche Hinweise, was falsch ist. Gibt es alternative Möglichkeiten, dies zu tun.
Frühling 3.1, JDK 1.7
Danke für Info. Zu Beginn wurde ein einfacher Filter implementiert und in web.xml konfiguriert, jedoch wurde er nach dem Beenden der Controller-Methode nicht aufgerufen. Mag sein, dass die interne Filterhierarchie im Frühjahr diesen Filter nicht aufruft oder die Reihenfolge in der Filterkette falsch ist. Alle Zeiger in dieser Richtung würden geschätzt werden. – Aarati
Einfache Filter werden direkt vom Servlet-Container aufgerufen und sind normalerweise unabhängig von spring-mvc. Aber es sollte * um * spring-mvc DispatcherServlet heißen: 'void doFilter (...) {/ * vor Servlet */chain.doFilter (...);/* nach dem Servlet * /} '. Lesen Sie noch einmal die Antwort im verknüpften Post ... –
Schließlich arbeitete TeeOutputStream, um servletoutputstream abzurufen. Danke an diesen Beitrag https://stackoverflow.com/questions/10457963/spring-rest-service-retrieving-json-from-request – Aarati