स्प्रिंग 3.0 के साथ आप HttpEntity
रिटर्न ऑब्जेक्ट का उपयोग कर सकते हैं । यदि आप इसका उपयोग करते हैं, तो आपके नियंत्रक को एक HttpServletResponse
वस्तु की आवश्यकता नहीं है , और इसलिए यह परीक्षण करना आसान है।
इसके अलावा, यह उत्तर Infeligo के सापेक्ष समान है ।
यदि आपके पीडीएफ फ्रेमवर्क का रिटर्न मूल्य एक बाइट सरणी है (अन्य रिटर्न मानों के लिए मेरे उत्तर का दूसरा भाग पढ़ें) :
@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);
}
यदि आपके पीडीएफ फ्रेमवर्क का रिटर्न प्रकार documentBbody
पहले से ही बाइट सरणी नहीं है (और यह भी नहीं ByteArrayInputStream
) तो यह समझदार नहीं होगा कि इसे पहले बाइट सरणी बनाया जाए। इसके बजाय इसका उपयोग करना बेहतर है:
उदाहरण के साथ 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);
}