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

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

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("部门名称", "姓名", "身份z");
        // 列名 数据填充
        List> list2 = new ArrayList<>();
        for (VsTravelRecordDyg vo : list) {
            Map map = new HashMap<>();
            map.put("部门名称", vo.getDw());
            map.put("姓名", vo.getUserName());
            map.put("身份z", 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("部门名称", "姓名", "身份z");
        // 列名 数据填充
        List> list2 = new ArrayList<>();
        for (VsTravelRecordDyg vo : list) {
            Map map = new HashMap<>();
            map.put("部门名称", vo.getDw());
            map.put("姓名", vo.getUserName());
            map.put("身份z", 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() ,源码里调用了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存