在Spring中编码下载的文件

时间:2016-08-22 06:39:01

标签: spring spring-mvc

我想创建一个控制器,它将向客户端发送一个CSV文件,然后我创建了下一个控制器:

@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 个答案:

答案 0 :(得分:1)

ResponseEntity的正文在发送之前会通过消息转换器。特定转换器的选择取决于主体的类别以及响应和请求标头。

我尝试使用您的代码段重现该问题,并在csv文件中获得预期的文本。所以我假设您注册了一个消息转换器,它以您观察的方式转换字节数组。

您可以调试AbstractMessageConverterMethodProcessor#writeWithMessageConverters并查看选择的转换器及其原因。