Spring 3.0 ile HttpEntity
dönüş nesnesini kullanabilirsiniz . Bunu kullanırsanız, denetleyicinizin bir HttpServletResponse
nesneye ihtiyacı yoktur ve bu nedenle test etmek daha kolaydır.
Bunun dışında, bu cevap Infeligo'nun cevabına görecelidir .
Pdf çerçevenizin dönüş değeri bir bayt dizisiyse (diğer dönüş değerleri için cevabımın ikinci bölümünü okuyun) :
@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);
}
PDF'nizdeki Çerçevesi (dönüş tipi ise documentBbody
) zaten bir bayt dizisi değildir (hayır da ve ByteArrayInputStream
) o zaman akıllıca olur DEĞİL ilk önce bir bayt dizisi yapmak. Bunun yerine kullanmak daha iyidir:
ile örnek 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);
}