首页 > 其他分享 >记录解决HttpServletResponse在参数报错的问题

记录解决HttpServletResponse在参数报错的问题

时间:2024-03-13 18:56:55浏览次数:28  
标签:excel HttpServletResponse param fileName 参数 报错 response temporaryPerformanceVO

下载excel功能需要用到HttpServletResponse,注入一直报错,java.lang.IllegalStateException: getOutputStream() has already been called for this response

@Resource
    HttpServletResponse httpServletResponse;

  使用注入的方法没问题

刚开始用的gson报栈溢出的错误,后来换成了fastjson报这个错误,最后定位在日志aop这里,会将HttpServletResponse 当做传过来的参数解析 冲突报错,

方法一,注释日志改用手每条controller手动加log的方法;

方法二,使用@resource注入获得HttpServletResponse ;

 

另外附上刚找到可以使用的excel导出代码

@Slf4j
public class ExcelUtil {

    /**
     * 导出excel
     *
     * @param fileName excel文件名称
     * @param sheetName excel sheet名称
     * @param list 数据
     * @param clazz
     * @param response
     */
    public static void exportExcel(String fileName, String sheetName, List<?> list, Class<?> clazz, HttpServletResponse response){
        ServletOutputStream outputStream;
        try {
            response.setContentType("application/vnd.ms-excel");
            response.setCharacterEncoding("utf8");

            fileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
            outputStream = response.getOutputStream();
            EasyExcel.write(outputStream)
                    .head(clazz)
                    .excelType(ExcelTypeEnum.XLSX)
                    .sheet(sheetName)
                    .doWrite(list);
            outputStream.flush();
        } catch (Exception e) {
            log.error("导出excel异常:{}",e.getMessage());
            e.printStackTrace();
        }
    }
}

使用方法

  public void downloadPerformanceTemplate(HttpServletResponse response) {

        List<UserDetailDO> userDetailDOS =
                userDetailMapper.selectList(new LambdaQueryWrapper<UserDetailDO>().orderByAsc(UserDetailDO::getDeptId));
        List<TemporaryPerformanceVO> collect = userDetailDOS.stream().map(t -> {
            TemporaryPerformanceVO temporaryPerformanceVO = new TemporaryPerformanceVO();
            BeanUtils.copyProperties(t, temporaryPerformanceVO);
            temporaryPerformanceVO.setUserName(t.getName());
            temporaryPerformanceVO.setOvertime(0);
            temporaryPerformanceVO.setNightShift(0);
            temporaryPerformanceVO.setSickLeave(0);
            return temporaryPerformanceVO;
        }).collect(Collectors.toList());
        ExcelUtil.exportExcel("绩效模板","绩效模板",collect,TemporaryPerformanceVO.class
        ,response);
    }

  

标签:excel,HttpServletResponse,param,fileName,参数,报错,response,temporaryPerformanceVO
From: https://www.cnblogs.com/zhahewei/p/18071305

相关文章

  • pip 升级后runpy.py报错
    报错信息: pip的版本冲突解决办法:https://pypi.org/project/pip/19.3.1/下载符合版本的pip,pip-19.3.1-py2.py3-none-any.whl ,将.whl改成.zip,解压后替换Programs\Python\Python37\Lib\site-packages中的pip文件 打开dos:piplist,OK ......
  • 每日一看大模型新闻(2024.1.11)2024属于小模型时代?TinyLlama 小模型发布后爆火:参数轻量
    1.产品发布1.1红旗品牌虚拟代言人上线“旗羿”和“旗妙”发布日期:2024.1.11一汽红旗携手腾讯混元大模型,提升服务体验主要内容:一汽红旗品牌近日推出了微信小程序“旗羿旗妙说”,该小程序基于腾讯混元大模型提供智能底座,为一汽红旗进行了全面的知识升级。同时,腾讯QQ联合一汽......
  • pytest-参数request的使用
    如果想把登录操作放到前置操作里,也就是用到@pytest.fixture装饰器,传参就用默认的request参数user=request.param这一步是接收传入的参数,下面演示一个参数的情况  那当request传递两个参数的时候,如果用到@pytest.fixture,里面用2个参数情况,可以把多个参数用一个字典去存储,这......
  • Python 函数的参数传递 *args和 **kwargs
    知识点:在函数调用时,*会以单个元素的形式解包一个元祖,使其成为独立的参数。在函数调用时,**会以键/值对的形式解包一个字典,使其成为独立的关键字参数。 deff(a,*args):print(args)f(1,2,3,4)​```输出为:(2,3,4)​```虽然传入1,2,3,4,但是解包为(1),(2,3,4),其中a是1......
  • LM2904DT运算放大器中文资料规格书PDF数据手册引脚图参数图片功能概述
    产品概述:该电路由两个独立的高增益运算放大器(运算放大器)组成,内部实现了频率补偿。它们专为汽车和工业控制系统而设计。该电路采用单电源供电,工作电压范围很广。低功耗与电源电压的大小无关。应用领域包括传感器放大器、直流增益模块和所有传统的运算放大器电路,这些电路现在可......
  • SpringBoot Controller接收参数的常用方式总结
    原生的HttpServletRequest可和其他注解配合使用,是内置对象,是整个请求可获取到所有的数据请求路径参数@PathVariable请求路径参数例如url/{id},则获取id参数。@PathVariabel(name="xx")@RequestParam例如url?name=xxx。@RequestParam(name="xx")Body参数@Req......
  • vagrant up 启动报错 Stderr: VBoxManage.exe: error: A NAT rule of this name alrea
    报错:使用vagrantup启动VirtualBox虚拟机时报错:Stderr:VBoxManage.exe:error:ANATruleofthisnamealreadyexistsVBoxManage.exe:error:Details:codeE_INVALIDARG(0x80070057),componentNATEngineWrap,interfaceINATEngine,calleeIUnknownVBoxManage.exe:e......
  • mysql卸载安装及其报错解决
    数据库软件机制复杂,解决它的相关问题的时候最有效的方法是dos命令。在删除,修改密码和处理报错的时候,往往只要dos命令正确发挥作用,不会引发别的问题而若是直接对mysql下的各种文件进行修改极易引发未知问题,应谨慎。为不使安装过程产生报错应该先在以下几个方面进行清理。1......
  • npm启动vue项目报错error:0308010C:digital envelope routines::unsupported的解决办
    错误截图解决方法package.json文件中修改dev项为setNODE_OPTIONS=--openssl-legacy-provider&vue-cli-serviceserve:"scripts":{"dev":"setNODE_OPTIONS=--openssl-legacy-provider&vue-cli-serviceserve","build:prod......
  • 彻底解决Qt报错:无法定位程序输入点于动态链接库
    彻底解决Qt报错:无法定位程序输入点于动态链接库问题描述前段时间使用QtCreator写程序,在最后打包的时候出错,期间尝试修改环境变量的顺序,后来发现不是环境变量的问题,但问题解决后并未将环境变量改回,导致今天使用VS2017联合Qt编译之前程序(之前已验证正确)的时候报错,具体错误信息如......