广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java利用Reflect实现封装Excel导出工具类
  • 178
分享到

Java利用Reflect实现封装Excel导出工具类

Java Reflect封装Excel导出工具类Java Excel导出Java Reflect 2022-11-13 19:11:31 178人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录定义excelExportEnum定义导出方法校验入参利用java反射获取Service中的所有method提取method中的入参对象,获取其Class传入参数,调用导出方法注

最近遇到一个需求,需要对页面的列表数据做导出操作,考虑了很多实现方案之后,最终选择了hutool的ExcelWriter + spring自带的ReflectionUtils工具类来实现这个功能,采用这种方式的主要原因是对现有代码改动较少,并且可以无缝切入系统,实现各个模块的导出操作,设计思路如下:

如上图所示,首先我们定义一个接口,此接口完成Excel导出功能,在ExcelExportService 中实现功能。

话不多说,上代码:

定义ExcelExportEnum

在导出Excel之前,我们需要先定义ExcelExportEnum,此枚举存储了我们后端需要导出的模块和模板名称


@Getter
@RequiredArgsConstructor
public enum ExcelExportEnum {


MODULE_A("moduleAService", "模块A");

private final String key;
private final String name;

}

定义导出方法

校验入参

首先,我们需要对入参进行校验,查看传入的 MODULE_NAME 是否和后端Enum的一致,并且我们需要对参数中的自定义方法名进行提取,我们通过ExcelExportEnum来获取导出的module的Service名称

    if (!map.containsKey(MODULE_NAME)) {
        throw new BaseException("缺少参数:moduleName");
    }
    String moduleName = map.get(MODULE_NAME).toString();
    if (!EnumUtil.contains(ExcelExportEnum.class, moduleName)) {
        throw new BaseException("模块查找失败");
    }
    String functionName = DEFAULT_FUNCTION_NAME;
    //如果传了自定义方法名
    if (map.containsKey(CUSTOM_FUNCTION_NAME)) {
        functionName = map.get(CUSTOM_FUNCTION_NAME).toString();
    }
    String serviceName = ExcelExportEnum.valueOf(moduleName).geTKEy();
    String tableName = ExcelExportEnum.valueOf(moduleName).getName();

利用java反射获取Service中的所有method

Map<String, Method> methodMap = Arrays.stream(SprinGContextHolder.getBean(serviceName).getClass().getMethods()).collect(Collectors.toMap(Method::getName, Function.identity(), (key1, key2) -> key2));

在上述代码中SpringContextHolder.getBean(serviceName).getClass().getMethods()方法,首先通过getBean来获取 第一步中得到的ServiceName的Java bean。然后通过Class.getMethods()方法获取此service中的所有方法

最后,使用Arrays.stream方法,将module对应的Service中的所有method获取到,并放入methodMap中,供后续代码使用

提取method中的入参对象,获取其Class

    Object o;
    try {
        o = methodMap.get(functionName).getParameterTypes()[0].getDeclaredConstructor().newInstance();
    } catch (Exception e) {
        throw new BaseException(e);
    }

通过Method.getParameterTypes()方法,将第二步中获取的method的入参的Class取到,并赋值给对象Object o,供后续调用分页列表接口传递入参匹配Class使用

传入参数,调用导出方法

    Map<String, Object> param = (Map<String, Object>) map.computeIfAbsent(PARAM, k -> new HashMap<String, Object>(4));
    param.put("limit", -1);
    CopyOptions copyOptions = new CopyOptions();
    copyOptions.setIgnoreError(true);
    PageUtils page = (PageUtils) methodMap.get(functionName).invoke(SpringContextHolder.getBean(serviceName), BeanUtil.mapToBean(param, o.getClass(), true, copyOptions));
    if (CollUtil.isEmpty(page.getList())) {
        throw new BaseException("数据获取失败");
    }
    Object resultObject = page.getList().get(0);
    ExcelUtils utils = new ExcelUtils(resultObject.getClass());
    utils.exportExcel(page.getList(), response, tableName, moduleName);

可以看到,在上述导出方法中,我们使用了Method.invoke方法,并且设置转义忽略

注意事项

使用hutool工具包输出到流

// 通过工具类创建writer,默认创建xls格式 
ExcelWriter writer = ExcelUtil.getWriter(); 
//创建xlsx格式的 
//ExcelWriter writer = ExcelUtil.getWriter(true); 
// 一次性写出内容,使用默认样式,强制输出标题 
writer.write(rows, true); 
//out为OutputStream,需要写出到的目标流 
writer.flush(out); 
// 关闭writer,释放内存 
writer.close();

注意 ExcelUtil.getWriter()默认创建xls格式的Excel,因此写出到客户端也需要自定义文件名为XXX.xls,否则会出现文件损坏的提示。 若想生成xlsx格式,请使用ExcelUtil.getWriter(true)创建。

到此这篇关于Java利用Reflect实现封装Excel导出工具类的文章就介绍到这了,更多相关Java Reflect封装Excel导出工具类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java利用Reflect实现封装Excel导出工具类

本文链接: https://www.lsjlt.com/news/170930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java利用Reflect实现封装Excel导出工具类
    目录定义ExcelExportEnum定义导出方法校验入参利用java反射获取Service中的所有method提取method中的入参对象,获取其Class传入参数,调用导出方法注...
    99+
    2022-11-13
    Java Reflect封装Excel导出工具类 Java Excel导出 Java Reflect
  • 使用Java导入、导出excel详解(附有封装好的工具类)
    😜作           者:是江迪呀✒️本文关键词:Java、Excel、导出、工具类、后端☀️每日   一言:有些事情不是对的才去坚持,而是坚持了它才是对的! 前言 我们在日常开发中,一定遇到过要将数据导出为Exc...
    99+
    2023-08-18
    java excel 开发语言
  • java实现的导出Excel工具类实例
    本文实例讲述了java实现的导出Excel工具类。分享给大家供大家参考,具体如下:ExcelExportUtil:package com.excel;import java.io.FileOutputStream;import java.i...
    99+
    2023-05-31
    java excel ava
  • Java导出Excel通用工具类实例代码
    目录一、概述二、项目实现1、构建pom.xml2、编写ExportExcelUtil类3、创建Student类4、创建测试类TestExportExcelUtil5、测试三、项目扩展...
    99+
    2022-11-12
  • 怎么在Java中导出Excel通用工具类
    今天就跟大家聊聊有关怎么在Java中导出Excel通用工具类,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、构建pom.xml我们的工程是利用Maven来构建的,项目具体搭建过程大...
    99+
    2023-06-14
  • 利用怎么对Java输出打印工具类进行封装
    这篇文章将为大家详细讲解有关利用怎么对Java输出打印工具类进行封装,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在进行Java打印输出,进行查看字段值的时候,觉得每次写了System.ou...
    99+
    2023-05-31
    java ava
  • Java使用excel工具类导出对象功能示例
    本文实例讲述了Java使用excel工具类导出对象功能。分享给大家供大家参考,具体如下:package com.gcloud.common;import org.apache.poi.ss.usermodel.Cell;import org...
    99+
    2023-05-30
    java excel 工具类
  • Java利用POI实现导入导出Excel表格
    本文实例为大家分享了Java利用POI实现导入导出Excel表格的具体代码,供大家参考,具体内容如下 一、Java利用POI实现导入导出Excel表格demo 1.引入依赖 <...
    99+
    2022-11-13
  • Java如何利用POI实现导入导出Excel表格
    这篇文章主要介绍“Java如何利用POI实现导入导出Excel表格”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何利用POI实现导入导出Excel表格”文章能帮助大家解决问题。一、Java...
    99+
    2023-07-06
  • 怎么用Java Hutool工具实现验证码生成及Excel文件的导入和导出
    这篇文章主要介绍“怎么用Java Hutool工具实现验证码生成及Excel文件的导入和导出”,在日常操作中,相信很多人在怎么用Java Hutool工具实现验证码生成及Excel文件的导入和导出问题上存在疑惑,小编查阅...
    99+
    2023-06-21
  • 利用Java怎么实现一个超时工具类
    本文章向大家介绍利用Java怎么实现一个超时工具类的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允许程...
    99+
    2023-06-06
  • 利用java如何实现把对象数组导出从Excel文件
    利用java如何实现把对象数组导出从Excel文件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、导入相关jar包,pom依赖如下: <dependency> ...
    99+
    2023-05-31
    java excel 对象数组
  • 利用Java工具类Hutool实现验证码校验功能
    目录Hutool工具类介绍Hutool实现验证码生成测试验证码生成其他样式的验证码第一篇是纯利用现有JDK提供的绘图类(ImageIO)类制作,这个过程比较复杂且需要了解ImageI...
    99+
    2022-11-13
    Hutool生成验证码 Hutool工具类 java验证码校验
  • 如何在JAVA项目中利用FTPClient工具类实现一个上传下载功能
    如何在JAVA项目中利用FTPClient工具类实现一个上传下载功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、写一个javabean文件,描述ftp上传...
    99+
    2023-05-31
    java ftpclient ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作