Spring Boot项目怎么实现Excel导入与导出功能


本文小编为大家详细介绍“SpringBoot项目怎么实现Excel导入与导出功能”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot项目怎么实现Excel导入与导出功能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Excel 导入与导出是项目中经常用到的功能,在 Java 中常用 poi 实现 Excel 的导入与导出。由于 poi 占用内存较大,在高并发下很容易发生 OOM 或者频繁 fullgc,阿里基于 poi 开源了 EasyExcel 项目。除了节约内存,EasyExcel 还简化了 API,通过注解映射 Excel 单元格与对象字段之间的关系,简单的几行代码就能搞定复杂的导入导出免费云主机域名功能了。看似一切美好,不过经常做 Excel 导入与导出就会发现,EasyExcel 还是没那么完美的。首先,导入与导出 Excel 本质是上将 Excel 文件内容与 Java 对象之间做一个映射,EasyExcel 做的只是在这两者之间转换。如果项目中的 Excel 导入与导出功能比较多,会产生大量的样板式代码,使用体验类似于 JDBC。另外,导入往往还伴随着校验,这是 EasyExcel 没有支持的功能。如果需要校验,要么写代码手动判断,要么调用 Java Validation 规范 定义的 API 判断,这又会产生大量样板式代码。而且,当前 spring boot 已经成了必备的 Java 开发框架,easyexcel 也没有进行整合。导入与导出通常发生在 Web 环境,对于 Spring MVC 来说,可以将请求信息转换为任意类型的 contoller 方法参数,将 controller 方法返回值转换为客户端支持的内容。如果能够使用自定义的 controller 方法参数接收 Excel 文件内容,将 controller 方法返回值转换为 Excel 文件响应,可以直接消除 Excel 导入与导出时的样板式代码。另外在将请求内容转换为 controller 方法参数时还可以加入自定义的校验逻辑。由于 Excel 导入与导出样板式代码、校验问题与具体的业务逻辑无关,可以单独抽象出来,我这里在 EasyExcel 的基础上封装了一个 easyexcel-spring-boot-starter 的项目,大大降低了 EasyExcel 上手的门槛,对用户来说只需要使用 EasyExcel 定义的注解提供映射关系就可以了,适用于简单场景的导入导出。首先需要引入依赖,坐标如下。不过很不幸的是目前还没传至中央仓库,需要的小伙伴可自行上传到私有仓库或直接把代码嵌入自己的项目。首先看下要导入的 Excel 内容吧。为了接收 Excel 文件内容,我们需要定义一个对应的 Model 类。然后使用 List 参数接收即可。注意参数前添加了 @ExcelParam 注解,用来标识 Excel 文件参数。这样,一个导入功能实现了,是不是很简单呢?默认情况下接收名称为 file 的表单字段作为 Excel 文件,如果不满足还可以修改。有时候,我们可能比较关心对象对应 Excel 的元数据,例如这个对象是第几行记录产生的,这个对象的字段对应 Excel 第几列,这个时候我们可以使用 ReadRows 参数接收 Excel。ReadRows 使用两个字段记录行映射关系与列映射关系。ExcelReadHeadProperty 是 EasyExcel 自带的类,表示列映射关系的元数据ReadRow 是框架自定义的类,表示行映射关系的元数据。看下 ReadRow 定义吧。使用 ExcelReadHeadProperty 获取字段对应列索引的示例代码如下。这里对 Excel 的导出进行了简单的支持。将 List 定义为 controller 方法返回值即可。需要注意的是使用 @ExcelResponse 注解表示响应内容为 Excel 文件。默认情况,下载的文件名称为 default.xlxs,写入到名称为 Sheet1 的工作表中。如果不满足需求可以修改。参数校验是 Excel 导入常用的功能,这里进行了强有力的支持,使用体验如原生 spring boot 校验般顺滑。与 spring boot 原生使用方式一样,将 @Validated@Valid 注解添加到 @ExcelParam 参数上即可。默认情况下框架使用 JSR-303 Bean Validation 规范定义的校验注解校验,需要手动引入 spring-boot-starter-validation,可通过设置环境变量 easyexcel.validator.default.enable=false 关闭。另外还可以自定义注解对对象校验。Bean Validation 注解只能校验单个字段或对象,如果需要对所有的对象进行校验,可以实现框架定义的 ExcelValidator 接口,然后将实现定义为 Spring Bean。这个接口定义如下。ExcelValidErrors 用于接收校验的错误信息,分别使用接口 ExcelValidObjectErrorExcelValidFieldError 接口定义行错误信息和单元格错误信息。例如,如果需要对所有的 DemoData 校验 integer 字段的值不能重复,可以使用如下的代码。与 Spring MVC 设计类似,这里也提供了两种接收校验结果的方式。开启校验后,如果校验结果中包含错误,会将错误信息封装到 ExcelValidException,并抛出异常,可以通过全局异常捕获的方式收集错误信息。如果不想通过异常捕获的方式接收校验的错误信息,还可以将错误信息添加到 @ExcelParam 参数的后面,示例代码如下。读到这里,这篇“SpringBoot项目怎么实现Excel导入与导出功能”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: CSS3中nth-child与nth-of-type的区别是什么

这篇文章主要介绍“CSS3中nth-child与nth-of-type的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS3中nth-child与nth-of-type的区别是什么”文章能帮助大家解决问题。…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/12 08:13
Next 03/12 08:13

相关推荐