Dengan Spring 3.0 Anda dapat menggunakan HttpEntity
objek kembali. Jika Anda menggunakan ini, maka pengontrol Anda tidak memerlukan HttpServletResponse
objek, dan karenanya lebih mudah untuk diuji.
Kecuali ini, jawaban ini relatif sama dengan jawaban Infeligo .
Jika nilai pengembalian kerangka pdf Anda adalah array byte (baca bagian kedua dari jawaban saya untuk nilai pengembalian lainnya) :
@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);
}
Jika jenis kembalinya PDF Anda Framework ( documentBbody
) belum menjadi array byte (dan juga tidak ada ByteArrayInputStream
) maka akan bijaksana tidak untuk membuat array byte pertama. Sebaliknya lebih baik menggunakan:
contoh dengan 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);
}