簡體   English   中英

如何強制RestController對CSV文件進行響應

[英]How to force the response of RestController to csv file

我正在開發Rest API,將負責返回一個csv文件作為響應。

這是我的Api界面:

@Api(value = Constantes.REPORTS)
public interface ExtractFileApi {
  @RequestMapping(value = Constantes.REPORTS_URL, produces = "application/csv", method = RequestMethod.GET)
  public ResponseEntity<InputStreamResource> getExtractFile() throws IOException;
}

這是我的界面實現:

@RestController
public class ExtractFileApiController implements ExtractFileApi {
    @Override
    public ResponseEntity<InputStreamResource> getExtractFile() throws IOException {
     ClassPathResource pdfFile = new ClassPathResource("pdf-sample.csv");
     HttpHeaders headers = new HttpHeaders();
     headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
     headers.add("Pragma", "no-cache");
     headers.add("Expires", "0");

     return ResponseEntity.ok().headers(headers).contentLength(pdfFile.contentLength())
            .contentType(MediaType.parseMediaType("application/octet-stream"))
            .body(new InputStreamResource(pdfFile.getInputStream()));
}

目前,我的API返回了下載文件的鏈接,但我不知道如何將響應強制為CSV文件(file.csv)。

誰能幫我 ?

您需要將返回類型更改為void ,然后在末尾使用以下代碼

Path path = Paths.get(pdfFile.getPath()); 
response.setHeader("content-disposition", "attachment; filename="
            + path.getFileName().toString().replace(" ", "_"));
    try {
        response.setContentType(Files.probeContentType(path));
        response.setContentLength((int) Files.size(path));
        // Copy bytes from source to destination, closes both streams.
        FileCopyUtils.copy(Files.newInputStream(path),
                response.getOutputStream());
    } catch (IOException e) {
        LOGGER.error("fetching file failed", e);
        response.setStatus(500);
    }

請嘗試將生產輸出的MIME類型更改為text/csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM