我正在使用 Spring Boot 应用程序并写入 csv 文件。这是控制器方法
@PostMapping(value = "/audit/keys", produces = "text/csv", consumes = "multipart/form-data")
public ResponseEntity<byte[]> getEmployeeReport(
@RequestPart(value="file") MultipartFile multiPartFile,
HttpServletResponse response) {
try {
response.setHeader("Content-Disposition", "attachment; filename=EmployeeRecord.csv");
service.getEmployeeRecords(multiPartFile, response);
} catch (Exception e) {
logger.error("File can not b read", e);
}
return null;
}
这是我的服务方法
public void getEmployeeRecords(MultipartFile multiPartFile,
HttpServletResponse response){
// csv generator
CsvGenerator csvGenerator = CSV_FACTORY.createGenerator(response.getOutputStream());
CsvMapper mapper = new CsvMapper();
mapper.configure(JsonGenerator.Feature.IGNORE_UNKNOWN, true);
mapper.configure(CsvGenerator.Feature.ALWAYS_QUOTE_STRINGS, true);
mapper.enable(CsvGenerator.Feature.STRICT_CHECK_FOR_QUOTING);
csvGenerator.writeObject(dao.fetchEmpRecords());
csvGenerator.flush();
csvGenerator.close();
}
我的数据库包含以下记录
empId empName empAddress
123 Roy John Street 2 Nawada
340 Roy Jennings Street # 2 contact $$$
由于第 2 条记录包含 # $ etc
,因此它不会写入 Csv
,但是我可以在响应/预览选项卡的 UI 上看到这两条记录。但是 EmployeeRecord.csv
只包含一条记录。尝试过使用 produces = "text/csv; charset=UTF-8"
但它对我不起作用,我正在使用 Apace 公共库并想使用 IOUtils
但到目前为止没有运气:(
答案 0 :(得分:0)
csvGenerator.writeObject(dao.fetchEmpRecords());
此方法用于编写一个给定的 Java 对象 (POJO)。 尝试为循环中的每条记录调用它。