Category : Spring Boot | Sub Category : Spring Boot | By Prasad Bonam Last updated: 2023-07-09 09:39:15 Viewed : 711
Import and export CSV files in a Spring Boot application:
Here is an example of how to import and export CSV files in a Spring Boot application:
First, include the necessary dependencies in your pom.xml
file:
xml<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Apache Commons CSV -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.9</version>
</dependency>
Next, create a controller to handle the import and export operations:
javaimport org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/api")
public class CSVController {
@PostMapping("/import")
public ResponseEntity<String> importCSVFile(MultipartFile file) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
// Process each line of the CSV file
// Perform your own logic here
System.out.println(line);
}
return ResponseEntity.ok("CSV file imported successfully.");
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.badRequest().body("Failed to import CSV file.");
}
}
@RequestMapping(value = "/export", produces = "text/csv")
public ResponseEntity<String> exportCSVFile() {
try (StringWriter writer = new StringWriter();
CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader("Name", "Age", "Email"))) {
// Simulated data
List<String> data1 = List.of("John Doe", "30", "john.doe@example.com");
List<String> data2 = List.of("Jane Smith", "25", "jane.smith@example.com");
// Add data rows to the CSV
csvPrinter.printRecord(data1);
csvPrinter.printRecord(data2);
// Flush and close the CSV printer
csvPrinter.flush();
csvPrinter.close();
// Prepare CSV file download response
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=data.csv");
return ResponseEntity.ok()
.headers(headers)
.body(writer.toString());
} catch (IOException e) {
e.printStackTrace();
return ResponseEntity.badRequest().body("Failed to export CSV file.");
}
}
}
In the importCSVFile
method, a MultipartFile
parameter is used to receive the uploaded CSV file. The file is then read line by line, and you can process each line according to your specific logic.
In the exportCSVFile
method, the CSVPrinter
class is used to generate a CSV file with the specified data. In this example, simulated data is used, but you can replace it with your actual data. The generated CSV content is returned as a downloadable file with the appropriate response headers.
Finally, you can run your Spring Boot application and test the import and export endpoints using tools like cURL or Postman. For example, to import a CSV file, you can send a POST request with a multipart/form-data
payload containing the CSV file. To export a CSV file, you can send a GET request to /api/export
, and the CSV file will be downloaded.
Remember to customize the logic according to your specific use case, such as data processing, error handling, and validation.