Spring中下载文件的编码
我想创建一个控制器,它将向客户端发送一个CSV文件,我创建了下一个控制器:Spring中下载文件的编码,spring,spring-mvc,Spring,Spring Mvc,我想创建一个控制器,它将向客户端发送一个CSV文件,我创建了下一个控制器: @ResponseStatus(value = HttpStatus.OK) @RequestMapping(value = "/csv", method = RequestMethod.GET) public ResponseEntity downloadCsvAllInvoiceTransactionsByFilter( @PageableDefault(direction = DESC, sort
@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);
}
@ResponseStatus(值=HttpStatus.OK)
@RequestMapping(value=“/csv”,method=RequestMethod.GET)
公共响应下载CSVallinVoiceTransactionsByFilter(
@PageableDefault(direction=DESC,sort=“invoiceDate”,size=30)可分页请求)引发IOException{
String someVariable=“Some text”;
byte[]out=someVariable.getBytes(Charset.forName(“UTF-8”);
HttpHeaders responseHeaders=新的HttpHeaders();
LOGGER.info(新字符串(out));
add(“内容处置”、“附件;文件名=transactions.csv”);
添加(“内容类型”,“文本/csv;字符集=utf-8”);
返回新的ResponseEntity(out,responseHeaders,HttpStatus.OK);
}
记录器正在显示正确的字符串:
一些文本
但在下载的文件中还有另一个
U29tZSB0ZXh0
如何解决此问题?响应主体在发送前通过消息转换器。特定转换器的选择取决于主体类以及响应和请求头 我试图用你的代码片段重现这个问题,并在csv文件中得到了预期的文本。所以我假设您注册了一个消息转换器,它按照您观察的方式转换字节数组 您可以调试
AbstractMessageConverterMethodProcessor#writeWithMessageConverters
并查看选择了哪个转换器以及原因