实现java生成并下载数据质控报告的 Word 文档(controller)

效果

 

使用模版 占位符实现将数据渲染到表格中

 

生成的报告名称

   @GetMapping("/getEquipmentWord")
    public ResponseEntity<byte[]> getReportWord(
//参数接收前端的起始时间终止时间(前端根据时间选择器,选择时间范围查看设备异常报告)
             @RequestParam LocalDate startTime
            , @RequestParam LocalDate endTime
 //设备的类型和基站名
            , @RequestParam String stationNum
            , @RequestParam String deviceType
             /* @RequestParam Integer type*/) throws Exception {
//生成的报告名称  
        String fileName =startTime +"-"+endTime + "数据质控报告.docx";


        qcService.exportEquipmentWord(Const.STATE_XLSX_TEMP_PATH+ fileName, startTime,endTime,deviceType,stationNum);
        File docFile = new File(Const.STATE_XLSX_TEMP_PATH + fileName);
        byte[] body = null;
        InputStream is = new FileInputStream(docFile);
        body = new byte[is.available()];
        is.read(body);
        HttpHeaders headers = new HttpHeaders();
        fileName = new String(fileName.getBytes("Gb2312"), "ISO-8859-1");
        headers.add("Content-Disposition", "attchement;filename=" + fileName);
        HttpStatus statusCode = HttpStatus.OK;
        ResponseEntity<byte[]> entity = new ResponseEntity<>(body, headers, statusCode);
        return entity;
    }

​Service层代码在

实现java生成并下载数据质控报告的 Word 文档(Service)

一、核心功能

  1. 接口定义

    • 使用 @GetMapping("/getEquipmentWord") 定义 HTTP GET 请求接口
    • 返回类型为 ResponseEntity<byte[]>,表示直接以二进制流形式返回文件内容。
  2. 参数接收

    • 接收四个请求参数:
      • startTime 和 endTime(LocalDate 类型,时间范围)
      • stationNum(站点编号)
      • deviceType(设备类型)
    • 参数通过 @RequestParam 从 URL 中提取,未设置 required 属性时默认为必填。

二、业务流程

  1. 文件生成

    • 根据参数动态生成 Word 文件名(格式如 2025-03-01-2025-03-28数据质控报告.docx
    • 调用 qcService.exportEquipmentWord() 方法,传入文件路径和参数,执行数据查询与 Word 文档生成逻辑。
  2. 文件读取与流处理

    • 通过 FileInputStream 读取生成的 Word 文件,将其转换为字节数组 byte[]
  3. 响应头设置

    • 设置 Content-Disposition 响应头,指定文件名为附件(attachment),并对中文文件名进行编码转换(GB2312 → ISO-8859-1),解决部分浏览器乱码问题
    • 注意:更推荐使用 StandardCharsets.UTF_8 等标准编码,避免兼容性问题。
  4. 响应返回

    • 封装字节数组、响应头和 HTTP 状态码(200 OK)到 ResponseEntity,完成文件下载响应。

三、技术实现特点

  1. Spring Boot 集成

    • 符合 Spring MVC 的请求处理流程:通过注解实现 URL 映射、参数绑定和响应封装
       
    • 依赖 @RestController 隐式处理 JSON 序列化,但此处直接操作二进制流。
  2. 文件操作

    • 使用硬编码路径 Const.STATE_XLSX_TEMP_PATH,需确保服务器端目录权限和磁盘空间。
    • 改进建议:采用动态临时文件路径(如 Files.createTempFile()),避免并发冲突。
  3. 异常处理

    • 方法声明 throws Exception 抛出所有异常,但未定义具体的异常处理逻辑(如 try-catch)。
    • 优化方向:添加全局异常处理器(@ControllerAdvice),返回更友好的错误信息。

这段代码实现了一个 ​数据质控报告生成与下载 的 API 接口,核心流程包括参数接收、文件生成、二进制流封装和响应返回。其技术实现依赖 Spring Boot 框架的请求处理机制,但存在资源管理、异常处理和编码兼容性等方面的优化空间。典型应用场景为设备监控系统中的报告导出功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值