关于java.lang.IllegalStateException: getOutputStream() has already been called 解决办法

今天被安排给一个项目加上导出文件的功能,项目是前后端分离的,而且之前也没有过类似的功能,所以我在做起来的时候遇到了各种麻烦。

首先,因为是生成excel文件,为了节省空间我直接是讲生成的excel文件流给直接写入了OutputStream中,虽然这样能通过接口获取到我想要的文件,但是后端总是会报一个java.lang.IllegalStateException: getOutputStream() has already been called。

在网上找了很久的资料,将写入流的代码写成了这样。

        try {
            HSSFWorkbook workbook =  GenerateExcel.generateFile(objectiveChildrenDTO);
            OutputStream os = response.getOutputStream();
            response.reset();
            response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setHeader("Content-Disposition", "attachment;filename=org.xls");
            workbook.write(os);
            response.flushBuffer();
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

但是还是没有解决问题,而且只是实现了功能,而不能显示自定义抛出的异常。
后来仔细看报错,原因是因为在Aspect中存在一个 logger.info(objectMapper.writeValueAsString(auditLog));
和我的 response.getOutputStream();起了冲突。

最后找到了项目中关于这个Aspect的注解,将它从controller 删除即可

你可能感兴趣的:(问题集锦,java,poi,excel,spring,bug)