无法写入csv文件的特殊字符

k75qkfdt  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(396)

我正在使用spring启动应用程序并写入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 $$$

因为第二条记录包含 # $ etc 它没有被写进去 Csv 但是,我可以在响应/预览选项卡的ui上看到这两个记录 EmployeeRecord.csv 仅包含一条记录。已尝试 produces = "text/csv; charset=UTF-8" 但它对我不起作用,我正在使用apace公共库,并希望使用 IOUtils 但到目前为止运气不好:(

nqwrtyyt

nqwrtyyt1#

csvGenerator.writeObject(dao.fetchEmpRecords());

这个方法用于编写一个给定的java对象(pojo)。尝试为循环中的每个记录调用它。

相关问题