Skip to content

Commit 6f2b083

Browse files
committed
HOTFIX: 납부자 엑셀 파일 깨지는 현상 수정
1 parent 9a551b8 commit 6f2b083

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

src/main/kotlin/site/billilge/api/backend/domain/payer/controller/AdminPayerApi.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package site.billilge.api.backend.domain.payer.controller
22

33
import io.swagger.v3.oas.annotations.Operation
4+
import io.swagger.v3.oas.annotations.media.Content
5+
import io.swagger.v3.oas.annotations.media.Schema
46
import io.swagger.v3.oas.annotations.responses.ApiResponse
57
import io.swagger.v3.oas.annotations.responses.ApiResponses
68
import io.swagger.v3.oas.annotations.tags.Tag
9+
import org.springframework.core.io.InputStreamResource
710
import org.springframework.http.ResponseEntity
811
import org.springframework.web.bind.annotation.RequestBody
912
import org.springframework.web.bind.annotation.RequestParam
@@ -62,4 +65,22 @@ interface AdminPayerApi {
6265
]
6366
)
6467
fun deletePayers(@RequestBody request: PayerDeleteRequest): ResponseEntity<Void>
68+
69+
@Operation(
70+
summary = "학생회비 납부자 Excel 파일 다운로드",
71+
description = "학생회비 납부자 데이터를 엑셀 파일로 다운받을 수 있는 관리자용 API"
72+
)
73+
@ApiResponses(
74+
value = [
75+
ApiResponse(
76+
responseCode = "200",
77+
description = "파일 다운로드 성공",
78+
content = [Content(
79+
mediaType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
80+
schema = Schema(type = "string", format = "binary")
81+
)]
82+
)
83+
]
84+
)
85+
fun createPayerExcel(): ResponseEntity<InputStreamResource>
6586
}

src/main/kotlin/site/billilge/api/backend/domain/payer/controller/AdminPayerController.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package site.billilge.api.backend.domain.payer.controller
33
import org.springframework.core.io.InputStreamResource
44
import org.springframework.http.ContentDisposition
55
import org.springframework.http.HttpHeaders
6+
import org.springframework.http.MediaType
67
import org.springframework.http.ResponseEntity
78
import org.springframework.web.bind.annotation.*
89
import site.billilge.api.backend.domain.payer.dto.request.PayerDeleteRequest
@@ -42,7 +43,7 @@ class AdminPayerController(
4243
}
4344

4445
@GetMapping("/excel")
45-
fun createPayerExcel(): ResponseEntity<InputStreamResource> {
46+
override fun createPayerExcel(): ResponseEntity<InputStreamResource> {
4647
val excel = payerService.createPayerExcel()
4748
val currentDate = LocalDate.now()
4849
val dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd")
@@ -51,9 +52,11 @@ class AdminPayerController(
5152
.filename("kmusw_payers_${dateFormatter.format(currentDate)}.xlsx")
5253
.build()
5354
}
55+
val excelMediaType = MediaType.valueOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
5456

5557
return ResponseEntity.ok()
5658
.headers(headers)
59+
.contentType(excelMediaType)
5760
.body(InputStreamResource((excel)))
5861
}
5962
}

src/main/kotlin/site/billilge/api/backend/global/utils/ExcelGenerator.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,21 @@ class ExcelGenerator {
1717
): ByteArrayInputStream {
1818
val workbook = SXSSFWorkbook()
1919

20-
sheetData.forEach { (sheetName, sheetContent) ->
21-
val (headerTitles, rows) = sheetContent
22-
val sheet = workbook.createSheet(sheetName)
23-
styleHeaders(workbook, sheet, headerTitles)
24-
fillData(sheet, rows, headerTitles.size)
25-
}
26-
27-
val out = ByteArrayOutputStream()
28-
workbook.write(out)
29-
workbook.close()
20+
try {
21+
sheetData.forEach { (sheetName, sheetContent) ->
22+
val (headerTitles, rows) = sheetContent
23+
val sheet = workbook.createSheet(sheetName)
24+
styleHeaders(workbook, sheet, headerTitles)
25+
fillData(sheet, rows, headerTitles.size)
26+
}
3027

31-
return ByteArrayInputStream(out.toByteArray())
28+
val out = ByteArrayOutputStream()
29+
workbook.write(out)
30+
return ByteArrayInputStream(out.toByteArray())
31+
} finally {
32+
workbook.dispose()
33+
workbook.close()
34+
}
3235
}
3336

3437
private fun styleHeaders(workbook: SXSSFWorkbook, sheet: SXSSFSheet, headerTitles: Array<String>) {

0 commit comments

Comments
 (0)