2016-08-22 63 views
3

我想創建將發送到客戶端CSV文件的控制,我創建了一個控制器:編碼下載的文件在Spring

@ResponseStatus(value = HttpStatus.OK) 
@RequestMapping(value = "/csv", method = RequestMethod.GET) 
public ResponseEntity downloadCsvAllInvoiceTransactionsByFilter(
     @PageableDefault(direction = DESC, sort = "invoiceDate", size = 30) Pageable pageRequest) throws IOException { 
    String someVariable = "Some text"; 
    byte[] out = someVariable.getBytes(Charset.forName("UTF-8")); 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    LOGGER.info(new String(out)); 
    responseHeaders.add("content-disposition", "attachment; filename=transactions.csv"); 
    responseHeaders.add("Content-Type","text/csv; charset=utf-8"); 
    return new ResponseEntity<>(out,responseHeaders,HttpStatus.OK); 
} 

記錄儀顯示的是正確的字符串:

一些文本

但在下載文件還有另外一個

U29tZSB0ZXh0

我該如何解決這個問題?

回答

1

ResponseEntity正文在發送之前會經過消息轉換器。特定轉換器的選擇取決於主體的類別以及響應和請求標頭。

我試圖重現與您的代碼段的問題,並獲得預期的文本在CSV文件。所以我假設你有一個註冊的消息轉換器按照你觀察的方式轉換字節數組。

您可以調試AbstractMessageConverterMethodProcessor#writeWithMessageConverters並查看選擇了哪個轉換器以及原因。