http要求からcsvファイルを読み込もうとしているときに、このバグが発生しています。httpリクエスト(WebService)からCsvファイルを読み取るバグ
私のCSVファイルには、次のようになります。
idUser,status
123,block
456,unblock
789,block
そして、私はこの受けている:私は、それは単に行の最後の文字で消えhttpリクエストを通じて送信するときにどういうわけか
idUser,status123,block456,unblock789,block
を( '\ n')。私はOpencsvやjavaCsvのような多くの読者を試してきました。また、InputStream、String、fileなど、さまざまな方法でファイルを受け取りました。バグがリクエスタにあるようだが、ChromeのPostmanやfirefoxのOpen HttpRequesterなど、さまざまなリクエスタも試してみた。また、WindowsやLinuxなどのさまざまな環境でファイルを生成することもできます。私はLinuxとviceversaにウィンドウで送信しようとしました。それがうまく動作する唯一の方法は、Base64に変換してサービス内のcsvファイルに解析することでしたが、私のクライアントが常にファイルを変換しないようにしました。もう1つの方法は、リポジトリから直接読み込むことでしたが、WebServiceではありません。私は今すぐファイルを読むためにJavaCsvを使用していますhttps://www.csvreader.com/java_csv_samples.php。
私のwebサービス:
@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');
の終わりを設定しようとしました:/事前にありがとうございます!
私は前に@FormDataParamを使用していましたが、いくつかの問題がありました。単にInputStreamを直接受け取って、MediaTypeを@Consumes({"text/csv"})私がファイルを正しく読んでいるかどうかを確認して、最後に '\ n'の最後を読んでいないというバグがあります。このMultipart_form_dataを動作させるとこのバグは修正されていると思いますか? – Allan
あなたはhtmlフォームを使用していますか?そうでない場合は、単純に 'application/octet-stream'を使ってバイナリとしてデータを送信してください。フォームを処理する必要がある場合は、ファイルのアップロードを正しく処理する必要があります – pedrofb
はい、クライアントはこのサービスをhtml形式で使用します。最初にマルチパートで作業を行い、結果を確認するためにここで更新します。ありがとう! – Allan