【发布时间】:2016-07-04 15:20:51
【问题描述】:
我在尝试从 http 请求读取 csv 文件时遇到此错误。
我的 CSV 文件如下所示:
idUser,status
123,block
456,unblock
789,block
我收到了这个:
idUser,status123,block456,unblock789,block
不知何故,当我通过 http 请求发送时,它会随着行尾的字符 ('\n') 而消失。我试过很多 Reader,比如 Opencsv 和 javaCsv。并且还通过多种方式接收文件,如InputStream、String、file。似乎错误在请求者中,我也尝试了不同的请求者,例如 Chrome 中的 Postman 和 Firefox 中的 Open HttpRequester。并且还在windows和linux等不同环境下生成文件。我试图将 Windows 发送到 linux,反之亦然。它工作的唯一方法是转换为 Base64 并将其解析为服务内的 csv 文件,但我不希望我的客户一直转换文件。另一种方法是直接从存储库中读取,但不会是 WebService。我现在正在使用 JavaCsv 读取文件https://www.csvreader.com/java_csv_samples.php。
我的网络服务:
@PUT
@Path("/csvReader")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response editByCsvFile(InputStream csvFileInput){
try {
CsvReader csvFile = new CsvReader(new InputStreamReader(csvFileInput));
csvFile.readHeaders();
while (csvFile.readRecord()){
String idUser = csvFile.get("idUser");
String status = csvFile.get("status");
if(status.equals("block")){
blockUser(Long.parseLong(IdUser));
}
if(status.equals("unblock")){
unblockUser(Long.parseLong(IdUser));
}
}
csvFile.close();
} catch (UnsupportedEncodingException ex) {
log.info("Unsupported Encoding", ex);
} catch (IOException ex) {
log.info("IO Exeption", ex);
}
return Response.ok().build();
}
我也尝试直接设置分隔符csvFile.setDelimiter(','); 和行尾csvFile.setRecordDelimiter('\n'); 没有成功:/ 提前谢谢!
【问题讨论】:
标签: java web-services csv restful-architecture