package com.gmp.mock.controller; import jakarta.validation.Valid; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; import com.gmp.mock.dto.DocxExportRequest; import com.gmp.mock.service.DocxService; import com.gmp.mock.service.DocxService.ExportResult; @RestController @RequestMapping("/api/docx") public class DocxController { private final DocxService docxService; public DocxController(DocxService docxService) { this.docxService = docxService; } @PostMapping("/export") public ResponseEntity exportDocx(@Valid @RequestBody DocxExportRequest request) { ExportResult result = docxService.export(request.getExportId()); StreamingResponseBody stream = outputStream -> result.writer().write(outputStream); return ResponseEntity.ok() .contentType(MediaType.parseMediaType( "application/vnd.openxmlformats-officedocument.wordprocessingml.document")) .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + result.fileName() + "\"") .body(stream); } }