当前位置: 首页 > news >正文

写导出接口的一些理解

前几篇文章讲了对表的4种操作,分别是增删改查,这篇文章我们来讲一下对表的另一种操作,就是导出表。

其实表的导入导出是很常见的,基本上很多时候都需要写这两个接口,我当时问光哥,光哥说导入导出接口是比较基本的,和增删改查接口差不多常见,都需要掌握,这逃不掉的,以后会经常遇到。我前两天都在写导入导出接口,因为IT资产管理有3张表嘛,而业务要求这三张表都要有导入导出的功能,所以我只好每张表都要写导入导出接口。根据我这两天写的,我有了一丢丢感悟,就是说导出接口相对于导入接口而言简单一些,我们优先写导出接口,然后写导入接口。这篇文章,我们先来讲一下如何写导出接口。

导出接口是有一个模板的,模板是这样:

@SneakyThrows@ApiOperation(value = "导出It设备信息", notes = "导出It设备信息")@GetMapping("/exportDevice")public void exportDevice(ItDevicePageQuery queryParams, HttpServletResponse response) {ClassPathResource resource = new ClassPathResource("templates/ItDevice_template.xlsx");List<ITDeviceData> result = itDeviceInformationService.exportDevice(queryParams);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode("IT设备导出_" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), ITDeviceData.class).withTemplate(resource.getInputStream()).sheet().doFill(result);}

其实不需要把所有代码都读懂,但是比较关键的地方需要注意一下:

public void exportDevice(ItDevicePageQuery queryParams, HttpServletResponse response) 

这个方法的参数中有ItDevicePageQuery,为什么要有这个参数呢?有些时候,用户可能希望导出符合特定条件的设备信息,例如某个类型的设备、某个时间段内的设备等,通过传递查询参数,就可以动态地调整导出的数据范围和内容。

ClassPathResource resource = new ClassPathResource("templates/ItDevice_template.xlsx");

这个代码是一个导出的模板,ItDevice_template.xlsx文件是自己写的,长这样:

写完之后把文件放到templates文件夹中,到时候导出的文件长这样:

 List<ITDeviceData> result = itDeviceInformationService.exportDevice(queryParams);

这行代码意思就是使用 itDeviceInformationService 服务,根据 queryParams 参数导出设备数据,并将结果存储在 result 列表中。

 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileName = URLEncoder.encode("IT设备导出_" + System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");EasyExcel.write(response.getOutputStream(), ITDeviceData.class).withTemplate(resource.getInputStream()).sheet().doFill(result);

这段代码有点绕,反正一句话就是:这将 result 对象中的数据转换为 Excel 表格,并通过 HTTP 响应输出。只要知道这个就好了,毕竟这段代码算是输出接口框架的内容,具体的暂时先不用深究,知道个大概就好了。

刚刚有一段代码是讲从数据库中拿数据放到result列表中,但是我当时没有具体的说这个方法,这个方法才是最关键最重要的,我们看看这个方法是怎么写的:

public List<ITDeviceData> exportDevice(ItDevicePageQuery queryParams) {List<ITDeviceData> list = this.baseMapper.excelList(queryParams);return list;}

这个方法是在mapper层编写一条sql语句,把IT设备信息表的符合查询参数的数据都拿出来。当然,导出接口的service层肯定不可能像这样这么简单,因为你不可能把数据库中的数据不做任何处理就放到excel中,比如你数据库中有一个数据是01,但是这个01是通用参数,01在这里代表“购置”,那你肯定要在service层做处理,把01看看怎么变成“购置”,不然你直接导出一个01,那谁知道你这个01代表什么是吧。

其实最难的地方就是怎么把数据库中的那些很抽象的数据变成一些让用户能够理解的数据,你把这一步搞定了,基本上就导出接口搞定了。


http://www.mrgr.cn/news/58498.html

相关文章:

  • android 生成json 文件
  • [Linux网络编程]04-多进程/多线程并发服务器思路分析及实现(进程,信号,socket,线程...)
  • C语言 | Leetcode C语言题解之第507题完美数
  • 【MySQL】C语言连接MySQL数据库3——事务操作和错误处理API
  • 【凸优化第三章】凸函数
  • Maven 介绍与核心概念解析
  • lazada 商品详情 API 的获取与应用
  • python调用PIL库处理图片
  • JS轮播图实现自动轮播、悬浮停止轮播、点击切换,下方指示器与图片联动效果
  • 【人工智能】——matplotlib教程
  • 广州企业管理咨询公司排名前十
  • 大尺寸反射式液晶显示模块行业分析:预计2030年全球市场规模将达到2,020.21百万美元
  • echarts给Y轴的不同轴线设置不同的颜色的样式
  • 【OpenAI】第二节(Token)关于ChatGPT的Token你了解多少?最全Token讲解过程!
  • SpringMVC8-HttpMessageConverter
  • 《企业自设2-软件测试》搭建locust环境+使用它搜索百度接口
  • 在Flutter中实现排行榜滑动阻尼效果
  • 大家都在用的HR招聘管理工具:国内Top5排名
  • 免费开源!语音识别平台让医疗对话更高效,沟通更准确
  • xtu oj 字母序列
  • 时间数据可视化基础实验(南丁格尔玫瑰图)——Python热狗大胃王比赛数据集
  • 网站建设中需要注意哪些安全问题?----雷池社区版
  • 达梦数据库基本操作指南:从表空间创建到触发器应用
  • K8S部署
  • 从设计到伴飞:数字孪生赋能航天航空新时代
  • 大模型日报|12 篇必读的大模型论文