public void downloadFailedUsingJson(HttpServletResponse response) throws IOException { try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
String fileName = URLEncoder.encode("测试", "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
// 这里需要设置不关闭流
EasyExcel.write(response.getOutputStream(), DownloadData.class).autoCloseStream(Boolean.FALSE).sheet("模板")
.doWrite(data());
} catch (Exception e) {
// 重置response
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
Map<String, String> map = new HashMap<String, String>();
map.put("status", "failure");
map.put("message", "下载文件失败" + e.getMessage());
response.getWriter().println(JSON.toJSONString(map));
}
}
用的这个官方文档代码。
测试工具:postman
问题:我使用本地代码下载几千条数据没问题可以下载成功,但是我把项目部署导服务器上面的时候下载几百条没问题但是千条以上日志就会报:系统异常java.lang.illegalstateException:Cannot call reset() after response has been committed, org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation,下载的response.json 文件内就是:system is not startup!
问题是拼装数据DTO的时候 耗时太长,导致请求超时,发生错误:
解决方案:1.增加设置的超时时间 (这个估计不现实 20s 已经很长了)
2.优化拼装数据DTO的代码(优化空间不大)
建议:换方案做,接口接收到了导出请求后,保存数据库,发送mq,直接返回成功(文案:导出请求成功,等待生生成excel文件)
接着 可以用自动任务定时扫描数据库的导出请求,然后再去导出文件,把文件链接更新到库,最后前端做个列表展示 并可以下载
或者 用mq。去消费mq。不需要定时任务,然后再去导出文件,把文件链接更新到库,最后前端做个列表展示 并可以下载
出现这种情况,可能是你的excel设置了style,而style定义在循环语句内部,导致错误,把style的定义放在循环语句外面就正常了。
java.lang.illegalstateException:Cannot call reset() after response has been committed
状态异常,要不就是有什么条件判断执行了,response.redirect方法后右执行了后面的代码,检查一下代码
https://blog.csdn.net/evilcry2012/article/details/78864528看看对你有木有帮助
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
springboot项目,本地启动下载多少条数据都问题不大,但是把项目打jar包,布到服务器上时用postman测试的时候下载数据超过20秒后就报错。异常:java.lang.illegalstateException:Cannot call reset() after response has been committed, org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation,下载的response.json 文件内就是:system is not startup!
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
你需要把后台异常贴全,那个异常堆栈 到底 都贴出来,里面可能有原因的。
还有,你 确定是 几百条 几千条的问题吗。会不会是因为某一个特殊的excel引爆这个问题的。你去看看 是不是总是死在同一个excel上?
还有你要 注意一下poi 和easyexcel的版本释放匹配