栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

getOutputStream() has already been called for this response问题终极解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

getOutputStream() has already been called for this response问题终极解决

今天做项目需要用导出数据到Excel,数据导出都正常就是后台报getOutputStream() has already been called for this response。

直接上代码:

    @GetMapping("/export")
    @ResponseBody
    public AjaxResult export(@ModelAttribute VsTravelRecordDyg vsTravelRecordDyg , HttpServletResponse response)
    {
       
      List list = vsTravelRecordDygService.selectVsTravelRecordList(vsTravelRecordDyg);

        // 列名
        List listName = Arrays.asList("部门名称", "姓名", "身份证");
        // 列名 数据填充
        List> list2 = new ArrayList<>();
        for (VsTravelRecordDyg vo : list) {
            Map map = new HashMap<>();
            map.put("部门名称", vo.getDw());
            map.put("姓名", vo.getUserName());
            map.put("身份证", vo.getIdCard());
            list2.add(map);
        }
        // 将需要写入Excel的数据传入
        
        return ExcelPortUtil.excelPort("登记记录", listName, list2, null, response);

之前的代码就是这样写的 直接就报错

改正之后:其它代码不变  返回值改为null 结果就不报错了。

@GetMapping("/export")
    @ResponseBody
    public String export(@ModelAttribute VsTravelRecordDyg vsTravelRecordDyg , HttpServletResponse response)
    {
       
      List list = vsTravelRecordDygService.selectVsTravelRecordList(vsTravelRecordDyg);

        // 列名
        List listName = Arrays.asList("部门名称", "姓名", "身份证");
        // 列名 数据填充
        List> list2 = new ArrayList<>();
        for (VsTravelRecordDyg vo : list) {
            Map map = new HashMap<>();
            map.put("部门名称", vo.getDw());
            map.put("姓名", vo.getUserName());
            map.put("身份证", vo.getIdCard());
            list2.add(map);
        }
        // 将需要写入Excel的数据传入
        ExcelPortUtil.excelPort("登记记录", listName, list2, null, response);
        return null;

原因分析:

产生这样的异常原因:是web容器生成的servlet代码中有out.write(""),
这个和JSP中调用的response.getOutputStream()产生冲突.即Servlet规范说明,
不能既调用response.getOutputStream(),又调用response.getWriter(),
无论先调用哪一个,在调用第二个时候应会抛出IllegalStateException 有人说 我没调用啊 response.getWriter() ,源码里调用了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/686249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号