Con Spring 3.0 puede usar el HttpEntity
objeto de retorno. Si usa esto, entonces su controlador no necesita un HttpServletResponse
objeto y, por lo tanto, es más fácil de probar.
Excepto esto, esta respuesta es relativamente igual a la de Infeligo .
Si el valor de retorno de su marco pdf es una matriz de bytes (lea la segunda parte de mi respuesta para otros valores de retorno) :
@RequestMapping(value = "/files/{fileName}", method = RequestMethod.GET)
public HttpEntity<byte[]> createPdf(
@PathVariable("fileName") String fileName) throws IOException {
byte[] documentBody = this.pdfFramework.createPdf(filename);
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_PDF);
header.set(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=" + fileName.replace(" ", "_"));
header.setContentLength(documentBody.length);
return new HttpEntity<byte[]>(documentBody, header);
}
Si el tipo de retorno de su PDF Framework ( documentBbody
) no es una matriz de bytes (y tampoco ByteArrayInputStream
), entonces sería prudente NO convertirla primero en una matriz de bytes. En cambio, es mejor usar:
ejemplo con FileSystemResource
:
@RequestMapping(value = "/files/{fileName}", method = RequestMethod.GET)
public HttpEntity<byte[]> createPdf(
@PathVariable("fileName") String fileName) throws IOException {
File document = this.pdfFramework.createPdf(filename);
HttpHeaders header = new HttpHeaders();
header.setContentType(MediaType.APPLICATION_PDF);
header.set(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=" + fileName.replace(" ", "_"));
header.setContentLength(document.length());
return new HttpEntity<byte[]>(new FileSystemResource(document),
header);
}