You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot集成Apache POI导出XLS文件失败:未触发下载内容显示于页面

解决Excel导出未触发下载、数据直接显示在页面的问题

嘿,我看了你的代码,问题其实出在控制器的响应头配置上,有两个小细节没做好:

  • 响应头名称拼写错误:你在设置Content-Dispotion的时候少写了一个's'!正确的响应头应该是Content-Disposition,这个错误会让浏览器完全忽略“附件下载”的指令,直接把Excel的二进制数据当成页面文本显示出来。
  • 缺少文件类型声明:没有给响应设置正确的Content-Type,浏览器没法判断这是一个Excel文件,自然不会触发下载行为。

给你修正后的控制器代码:

@GetMapping("/descargar")
public ResponseEntity<InputStreamResource> exportData() throws Exception {
    ByteArrayInputStream stream = clienteService.exportData();
    HttpHeaders headers = new HttpHeaders();
    // 修正拼写错误的响应头名称
    headers.add("Content-Disposition", "attachment; filename=clientes.xls");
    // 添加Excel文件的Content-Type
    headers.add("Content-Type", "application/vnd.ms-excel");
    
    return ResponseEntity.ok()
            .headers(headers)
            .contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
            .body(new InputStreamResource(stream));
}

另外再提个小建议:你的ClienteService里创建HSSFWorkbook(对应xls格式)是没问题的,如果后续要支持xlsx格式,可以换成XSSFWorkbook,记得同步修改Content-Type为application/vnd.openxmlformats-officedocument.spreadsheetml.sheet。

内容的提问来源于stack exchange,提问作者Dorian Gray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 19:17:51