前端调用后端编写的导出excel表格接口

前提:

我在前人将excel工具封装好的基础上,实现前端导出后端编写的excel表格接口,出现过很多问题。

 先看前人的代码:

前端
handleExport() {
      const params = Object.assign({}, this.queryParams.value)
      this.download('/system/a/feedback/export', params,`feedback_${new Date().getTime()}.xlsx`)
    },
后端:
@PostMapping("/export")
    public void export(HttpServletResponse response, QueryFeedbackDTO query) {
        List<Feedback> list = feedbackService.selectFeedbackList(query);
        ExcelUtil<Feedback> util = new ExcelUtil<Feedback>(Feedback.class);
        util.exportExcel(response, list, "反馈数据");
    }

再看我出现的问题: 

问题1:
Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported

解决问题1:

该问题表示,后端不支持application/x-www-form-urlencoded类型的参数。

问题2:

Request method 'POST' not supported

解决问题2:

 这个问题很简单,大家一看就知道,后端不支持POST请求。大家肯定会说,这个问题也很好解决啊,就是你代码的请求类型写错了。其实不然,大家想到的我也想得到。那我的这个问题到底怎么回事呢?

原因:在我实现前端导出excel文件的功能时,我先去看了其他模块的关于实现怎么导出excel文件的代码。我就借用了前人的代码,在基础上修改了,结果就出现了这个问题。

分析:当我看着我的后端代码的请求方式就是POST请求时,我百思不得其解。于是乎,我就将矛头指向了前端的代码。

前端代码如下:

上述代码也很简单,就两行。this.ConsultationOverview是传递给后端接口的参数。

但是这个没毛病呀,很前人的代码一样呀。但是我万万没想到,这种写法只适合后端是GET请求的接口。

问题3:

明明已经下载下来了excel文件了,打开文件,数据为空。

解决问题3:

 该问题就是一个典型的,顾前忘后。文件都能下载下来,而且控制台还可以输出数据,结果文件中没有数据。

原因:

自己写的实体类的字段没有添加@Excel()注解。

问题4:

 前后端传参的问题:JSON格式还是表格格式以及请求类型的问题等等

解决问题四:

我的前端:
handleExport() {
      const params = Object.assign({}, this.ConsultationOverview)
      this.download('/system/a/department/exportlist', params,`feedback_${new Date().getTime()}.xlsx`)
    },
我的后端:
@PostMapping("/exportlist")
    public void exportList(QueryCriteriaDto queryCriteriaDTO, HttpServletResponse response){
        List<Appointment> appointmentTable = departmentService.getAppointmentTable(queryCriteriaDTO, 0);
        ExcelUtil<Appointment> util = new ExcelUtil<Appointment>(Appointment.class);
        util.exportExcel(response, appointmentTable, "挂号预约数据");
    }

我把后端@Requestbody注解删除了。

如果你也遇到以上问题,或者你也想实现前端下载excel文件的效果,那就参考以下吧。 

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实导入导出Excel功能可以使用Apache POI库,这里提供一个基于Spring Boot的简单示例代码。 1.添加依赖 在pom.xml文件中添加以下依赖: ```xml <!--excel导入导出--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2.实现导出Excel接口 ```java @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { // 创建工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表 XSSFSheet sheet = workbook.createSheet("Sheet1"); // 设置表头 String[] headers = {"姓名", "年龄", "性别"}; XSSFRow headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { XSSFCell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); } // 填充数据 List<User> userList = userService.getAll(); for (int i = 0; i < userList.size(); i++) { User user = userList.get(i); XSSFRow row = sheet.createRow(i + 1); row.createCell(0).setCellValue(user.getName()); row.createCell(1).setCellValue(user.getAge()); row.createCell(2).setCellValue(user.getGender()); } // 输出Excel文件 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=user.xlsx"); workbook.write(response.getOutputStream()); workbook.close(); } ``` 3.实现导入Excel接口 ```java @PostMapping("/import") public void importExcel(@RequestParam("file") MultipartFile file) throws IOException { // 读取Excel文件 XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); XSSFSheet sheet = workbook.getSheetAt(0); // 解析数据 List<User> userList = new ArrayList<>(); for (int i = 1; i <= sheet.getLastRowNum(); i++) { XSSFRow row = sheet.getRow(i); User user = new User(); user.setName(row.getCell(0).getStringCellValue()); user.setAge((int) row.getCell(1).getNumericCellValue()); user.setGender(row.getCell(2).getStringCellValue()); userList.add(user); } // 批量插入数据库 userService.batchInsert(userList); workbook.close(); } ``` 以上代码仅供参考,具体实现可根据自己的业务需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值