Приложение возврата из весенней загрузки / pdf с ResponseEntity <Resource> - PullRequest
0 голосов
/ 02 ноября 2018

В моем приложении springboot я пытаюсь вернуть pdf-файл с ResponseEntity-Resource-, чтобы смоделировать сервис. Поэтому я не могу изменить тип возвращаемого значения этого метода.

Мой код:

@RequestMapping(
        value = "/pdf",
        produces = MediaType.APPLICATION_PDF_VALUE,
        method = RequestMethod.GET
)
public ResponseEntity<Resource> getpdf() {
    try {
        ClassPathResource pdfFile = new ClassPathResource("sample.pdf");

        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type");
        headers.add(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, must-revalidate");
        headers.add(HttpHeaders.PRAGMA, "no-cache");
        headers.add(HttpHeaders.EXPIRES, "0");
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + pdfFile.getFilename());
        headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_PDF_VALUE);

        log.info("pdfFile.contentLength() : " + pdfFile.contentLength());

        return ResponseEntity
                .ok()
                .headers(headers)
                //.contentLength(pdfFile.contentLength())
                //.contentType(MediaType.APPLICATION_PDF)
                .body(new InputStreamResource(pdfFile.getInputStream()));
    } catch (IOException e) {
        log.error("Couldn't serialize response for content type ", e);
        return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
    }
}

Когда я пытаюсь вызвать это с помощью почтальона или чванства, у меня появляется 406 с заголовком ответа:

{   
"date": "Fri, 02 Nov 2018 14:04:44 GMT",   
"content-length": "0", 
"content-type": null 
}

У кого-нибудь есть идея?

Ответ Swagger

Ответы [ 2 ]

0 голосов
/ 31 января 2019

слишком сложно .. скачать файл намного проще

@GetMapping(value="printing/",produces= MediaType.APPLICATION_PDF_VALUE)
public  @ResponseBody byte[]  print(@RequestParam("filterParam") String filterParam) {

    try {
        FileInputStream fis= new FileInputStream(new File("path to your file"));
        byte[] targetArray = new byte[fis.available()];
        fis.read(targetArray);
        return targetArray;
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
0 голосов
/ 02 ноября 2018

Вы можете удалить produces = MediaType.APPLICATION_PDF_VALUE.

Нет необходимости добавлять produces = MediaType.APPLICATION_PDF_VALUE, в RequestMapping, поскольку кажется, что он пытается преобразовать ResponeBody внутри.

Достаточно ниже строки кода, которую вы уже используете.

headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_PDF_VALUE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...