Загрузка пустого csv файла в api jersey rest - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь загрузить файл CSV, используя остальные API.Я использую библиотеку opencsv для преобразования Бина в CSV.

Я сделал отладку, все входные данные, такие как inputData и fileName, работают правильно, и StatefulBeanToCsv пишет в outputtream, но пустой файл загружается.Пожалуйста, найдите код ниже

Метод ресурса

@GET
@Path("/{category}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadAdminFile(@PathParam("category") String adminFileCategory,@QueryParam ("subCategory") String subCategory) {
        AdminFileStreamingOutput streamingOutput = adminFileDataService.downloadAdminFile(adminFileCategory,subCategory);
        return Response.ok(streamingOutput).header("Content-Disposition", "attachment; filename=" + streamingOutput.getFileName() + ";" + "charset=UTF-8")
                .build();
}

AdminFileStreamingOutput.java

public class AdminFileStreamingOutput implements StreamingOutput {

    private Collection<?extends Serializable> inputData;

    private String fileName;

    public AdminFileStreamingOutput(Collection<?extends Serializable> inputData,String fileName) {
        this.inputData = inputData;
        this.fileName = fileName;
    }

    @Override
    public void write(OutputStream output) throws IOException, WebApplicationException {
        StatefulBeanToCsvBuilder builder = new StatefulBeanToCsvBuilder(new OutputStreamWriter(output));
        StatefulBeanToCsv beanWriter = builder
                .withSeparator(';')
                .build();
        try {
            beanWriter.write(this.inputData.iterator());
        } catch (CsvDataTypeMismatchException | CsvRequiredFieldEmptyException  e) {
            throw new RuntimeException("Failed to download admin file");
        }
    }
    public String getFileName() {
        return fileName;
    }
}

Один из компонентов, который использует аннотации OpenCSV для стратегии отображения

public class ProjectInfo implements Serializable {

    @CsvBindByName(column = "ProjectName",required = true)
    private String projectName;

    @CsvBindByName(column = "ProjectCode",required = true)
    private String projectCode;

   //setters and getters
}

Может кто-нибудь помочь мне выяснить проблему?Заранее спасибо.

1 Ответ

0 голосов
/ 18 мая 2019

После использования flush загружается файл с контентом.Вот изменения

@Override
    public void write(OutputStream output) throws IOException, WebApplicationException {
        try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output))){
            StatefulBeanToCsvBuilder builder = new StatefulBeanToCsvBuilder(writer);
            StatefulBeanToCsv beanWriter = builder
                    .withSeparator(';').build();
            try {
                beanWriter.write(this.inputData.iterator());
                writer.flush();
            } catch (CsvDataTypeMismatchException | CsvRequiredFieldEmptyException  e) {
                throw new CMMV1Exception("Failed to download admin file");
            }
        }

    }

@ Paul Samsotha большое спасибо за ваш комментарий

...