我想创建一个控制器,它将向客户端发送一个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
我该如何解决这个问题?
答案 0 :(得分:1)
ResponseEntity
的正文在发送之前会通过消息转换器。特定转换器的选择取决于主体的类别以及响应和请求标头。
我尝试使用您的代码段重现该问题,并在csv文件中获得预期的文本。所以我假设您注册了一个消息转换器,它以您观察的方式转换字节数组。
您可以调试AbstractMessageConverterMethodProcessor#writeWithMessageConverters
并查看选择的转换器及其原因。