-
spring webflux mono excel dowonlad(poi 라이브러리)Spring/spring boot 및 기타 2023. 6. 27. 14:55
excel poi 라이브러리
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency>
spring webflux 에서는 HttpServletResponse 를 사용하지 않아 header 에 xlsx 정보를 넣어주는부분에서 spring 일반 샘플대로 하면 오류가 생길 것이다.
HttpHeaders 에 set 해주고 Mono.just 에 headers 를 세팅해주면 된다.import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import reactor.core.publisher.Mono; import java.io.ByteArrayOutputStream; import java.io.IOException; @RestController public class ExcelController { @GetMapping("/download-excel") public Mono<ResponseEntity<ByteArrayResource>> downloadExcel() { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // Create some sample data Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("Name"); headerRow.createCell(1).setCellValue("Email"); Row dataRow = sheet.createRow(1); dataRow.createCell(0).setCellValue("John Doe"); dataRow.createCell(1).setCellValue("john.doe@example.com"); // Generate Excel file bytes ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { workbook.write(outputStream); workbook.close(); } catch (IOException e) { e.printStackTrace(); } // Set up the HTTP response headers HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", "data.xlsx"); // Create a ByteArrayResource from the file bytes ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray()); // Return the response entity with the file bytes and headers return Mono.just(ResponseEntity.ok() .headers(headers) .contentLength(outputStream.size()) .body(resource)); } }
반응형'Spring > spring boot 및 기타' 카테고리의 다른 글
spring boot 3 r2dbc 설정(mysql) (0) 2023.06.23 spring netty thread sleep, webflux 에서 sleep 어떻게 하는게 나을까 (0) 2023.06.14 spring boot 3.0 추가되는 점(spring 6) (1) 2023.01.10 [spring boot] 스프링 부트 2.1 변경 내역 (0) 2021.08.31 [spring] Mybatis batch upsert 하는 방법(mysql) (0) 2021.08.11