记录解决HttpServletResponse在参数报错的问题
1.Unable to import Maven project项目无法运行的错误2.记录基于docker部署的禅道用nginx代理出错的问题3.记录docker中ngnix配置文件路由的问题4.前端传输json数据,后端如何用枚举接受5.记录一次分页查询第一页和第二页数据重复问题6.解决mysql出现docker出现access denied for user root@% to database“xxx”的问题7.解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource数据源无法连接 springboot项目无法启动的问题8.Method com/mysql/jdbc/JDBC4ResultSet.getObject(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Objec9.mybatis-plus加入日志输出,并且不打印结果集row只输出sql10.解决mysql自动插入的日期时间和现在的时间不一致的问题(基于docker)11.mysql数据库自动删除12.解决docker中gitlab的ssh拉取代码需要密码异常的问题
13.记录解决HttpServletResponse在参数报错的问题
14.自定义异常以及统一处理自定义返回值15.记录一次解决跨域问题解决过程。 strict-origin-when-cross-origin,net::ERR_FAILED, No 'Access-Control-Allow-Origin' header is present on the requested resource.下载excel功能需要用到HttpServletResponse,注入一直报错,java.lang.IllegalStateException: getOutputStream() has already been called for this response
1 2 | @Resource HttpServletResponse httpServletResponse; |
使用注入的方法没问题
刚开始用的gson报栈溢出的错误,后来换成了fastjson报这个错误,最后定位在日志aop这里,会将HttpServletResponse 当做传过来的参数解析 冲突报错,
方法一,注释日志改用手每条controller手动加log的方法;
方法二,使用@resource注入获得HttpServletResponse ;
方法三,使用try catch 抓掉不做处理 ;我选这种
另外附上刚找到可以使用的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(); } } }
使用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); } |