To generate CSV Files I'm using OpenCSV this is a guide on how to use it:
http://www.baeldung.com/opencsv
Haven't read this guide btw, but I've just found it and it's pretty recent (version 4) from april 2018 just to have it in the future if i need it for reference ;)
Below is an example of how I'm using it for download csv files from and endpoint:
@PostMapping( value = "/download", produces = "text/csv" )
@ApiImplicitParams( @ApiImplicitParam( name = Constant.App.ACCESS_TOKEN, value = Constant.App.ACCESS_TOKEN_VALUE, required = true, dataType = Constant.App.STRING_VALUE, paramType = Constant.App.HEADER_VALUE ) )
public void getPaymentsReceivedDownload( HttpServletResponse response, @Valid @RequestBody DatesReportRequestVo vo ) throws IOException
{
LOGGER.info( Constant.LogMessages.STARTING_PAYMENTS_RECEIVED_DOWNLOAD, vo.getStartDate(), vo.getEndDate() );
CsvFileUtil.setHeaderToCsv( response, CSV_NAME );
paymentsReceivedReport.generateReport( response.getWriter(), vo );
}
@SuppressWarnings("unchecked")
@LogExecutionTime
public void generateReport( PrintWriter writer, DatesReportRequestVo vo )
{
PageResponse report = runReport( vo );
String[] values = buildHeader( );
CSVWriter csvWriter = new CSVWriter( writer, ',' );
csvWriter.writeNext( values );
voToStringArray( writer, ( List<PaymentsReceivedVo> ) report.getContent(), csvWriter );
writer.flush();
writer.close();
}
private void voToStringArray( PrintWriter writer, List<PaymentsReceivedVo> trans, CSVWriter csvWriter )
{
int count = 0;
for ( PaymentsReceivedVo vo : trans )
{
String[] values = new String[8];
values[0] = vo.getApplicationId();
values[1] = vo.getCustomerName();
values[2] = vo.getMerchantDbaName();
values[3] = vo.getEffectiveDate();
values[4] = vo.getPaymentMethod();
values[5] = vo.getBatchId().toString();
values[6] = vo.getCreditCardVerification();
values[7] = vo.getAmount().toString();
csvWriter.writeNext( values );
count++;
if ( count % 10 == 0 )
{
writer.flush();
}
}
}
private String[] buildHeader()
{
String[] pValues = new String[22];
pValues[0] = "Application Id";
pValues[1] = "Name";
pValues[2] = "DBA Name";
pValues[3] = "Effective Date";
pValues[4] = "Type";
pValues[5] = "Batch Id";
pValues[6] = "Ver Code";
pValues[7] = "Payment Amount";
return pValues;
}