swagger 从控制器spring Boot 在浏览器中预览pdf:无法识别的响应类型;将内容显示为文本

cyvaqqii  于 2023-10-18  发布在  Spring
关注(0)|答案(2)|浏览(153)

我想预览一个pdf文件genereted与java,但下面的代码给出了这个错误
无法识别的响应类型;将内容显示为文本。

@GetMapping("/previewPDF/{codeStudent}")
    public ResponseEntity<byte[]> previewPDF(@PathVariable("codeStudent") String code) throws IOException {
        
        byte[] pdf = //pdf content in bytes

        HttpHeaders headers = new HttpHeaders();      
        headers.add("Content-Disposition", "inline; filename=" + "example.pdf");
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
        return ResponseEntity.ok().headers(headers).body(pdf); 
    }

更新:这是错误x1c 0d1x的屏幕截图

yftpprvb

yftpprvb1#

您需要为资源指定响应PDF媒体类型。
请参见RFC standart。媒体类型的完整列表。
Spring文档关于产生媒体类型。

@GetMapping(value = "/previewPDF/{codeStudent}", produces = MediaType.APPLICATION_PDF_VALUE)
    public ResponseEntity<byte[]> previewPDF(@PathVariable("codeStudent") String code) throws IOException

还为ResponseEntity设置PDF内容类型

@GetMapping(value = "/previewPDF/{codeStudent}", produces = MediaType.APPLICATION_PDF_VALUE)
    public ResponseEntity<byte[]> previewPDF(@PathVariable("codeStudent") String code) throws IOException {
        byte[] pdf = null;
        HttpHeaders headers = new HttpHeaders();
        String fileName = "example.pdf";
        headers.setContentDispositionFormData(fileName, fileName);        
        headers.setContentType(MediaType.APPLICATION_PDF);
        return ResponseEntity.ok().headers(headers).body(pdf);
    }
yduiuuwa

yduiuuwa2#

接受的答案直接下载PDF,而不是做预览,所以我不得不将Content-Disposition设置为inline

headers.setContentDisposition(
  ContentDisposition.builder("inline").filename("preview-report.pdf").build()
);

相关问题