स्प्रिंग 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);
}