This repository has been archived on 2026-08-05. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
gmp-service/src/main/java/com/gmp/mock/controller/DocxController.java
T
agentuser 7442f77bd0 refactor: streaming download, Git LFS templates, deploy workflow
- Replace base64 JSON response with StreamingResponseBody (zero-buffer)
- Error responses return JSON via GlobalExceptionHandler (400/404)
- Add git-lfs track for *.docx to keep repo lean
- Add deploy/deploy.sh: one-click build + restart
- Add deploy/clean-lfs.sh: periodic LFS cache cleanup
- Add deploy/gmp-service.service: systemd service unit
- Remove unused ApiResponse and DocxExportData DTOs
- Fix build.sh/run.sh jar name (gmp-mock-service -> gmp-service)
- Add TemplateNotFoundException for missing templates
2026-05-08 11:12:47 +08:00

44 lines
1.5 KiB
Java

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<StreamingResponseBody> 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);
}
}