title: Java: download CSV file with REST service
body: <p>I am trying to download csv file from REST endpoint. Here is what I am trying.</p>
  
  <pre><code>@ApiOperation(value = "export",
          notes = "Export Cache details for a given criteria")
  @ApiImplicitParams({
  
  })
  @ApiResponses(value = {
          @ApiResponse(code = 400, message = "Bad Request"),
          @ApiResponse(code = 404, message = "Not Found"),
          @ApiResponse(code = 500, message = "Internal Server Error") })
  @RequestMapping(method = RequestMethod.GET, value = "/export")
  public ResponseEntity export( HttpServletRequest request )
  {
      CacheDataManager cacheResultHandler = new CacheDataManager();
      InputStreamResource inputStreamResource = null;
      HttpHeaders httpHeaders = new HttpHeaders();
      long contentLengthOfStream;
  
      try
      {
          inputStreamResource = cacheResultHandler.exportCacheResults( request );
          httpHeaders.set( HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + "test.csv" );
  
          contentLengthOfStream = inputStreamResource.contentLength();
          httpHeaders.setContentLength( contentLengthOfStream );
      }
      catch ( IOException e )
      {
          e.printStackTrace();
      }
  
      return new ResponseEntity( inputStreamResource, httpHeaders, HttpStatus.OK );
  
  }
  </code></pre>
  
  <p>My export function.</p>
  
  <pre><code>@Override
  public InputStreamResource export( HttpServletRequest request )
  {
      StringBuilder sb = new StringBuilder();
      StringBuilder fileName = new StringBuilder( VALIDATION_REPORT );
  
      sb.append( "Column A" );
      sb.append( "," );
      sb.append( "Column B" );
      sb.append( "\n" );
  
      try
      {
  
              sb.append( "TEST A");
              sb.append( ',' );
              sb.append( "TEST B" );
              sb.append( '\n' );
  
  
  
          fileName.append( "_" ).append( sdf.format( new Date() ) ).append( ".csv" );
          return CsvFileWriter.csvFileWrite( fileName.toString(), sb );
  
      }
      catch ( Exception e )
      {
          e.printStackTrace();
  
      }
  
      return null;
  }
  </code></pre>
  
  <p><strong>CsvFileWriter.java</strong></p>
  
  <pre><code>package it.app.ext.dashboard.util;
  
  import org.springframework.core.io.InputStreamResource;
  
  import java.io.*;
  
  public class CsvFileWriter
  {
  
  public static InputStreamResource csvFileWrite( String fileName, StringBuilder content ) throws FileNotFoundException
  {
      File file = null;
      PrintWriter pw = null;
      try
      {
          file = new File( fileName );
          pw = new PrintWriter( file );
          pw.write( content.toString() );
      }
      catch ( FileNotFoundException e )
      {
          e.printStackTrace();
      }
      finally
      {
          pw.flush();
          pw.close();
      }
  
      InputStream inputStream = new FileInputStream( file );
  
      return new InputStreamResource( inputStream );
  }
  </code></pre>
  
  <p>}</p>
  
  <p>File is generating with content inside the <strong>tomcat/bin</strong> folder but exception occurred.</p>
  
  <pre><code>java.lang.IllegalStateException: InputStream has already been read - do not use InputStreamResource if a stream needs to be read multiple times.
  </code></pre>
  
  <p>I want to download a .csv file once call this endpoint.</p>
  
  <p>Any suggestions are appreciated.</p>
  
  <p>Thanks You</p>