Spring Cloud + Easy Excel导出表格

news2024/11/16 3:30:16

        在现代应用开发中,数据的导出和处理是一个非常常见的需求。Spring Cloud Easy Excel 是两个强大的工具,可以帮助我们高效地完成这个任务。本文将介绍如何将这两个工具结合起来,实现表格数据的导出功能。

1.环境准备

        在开始之前,我们需要确保开发环境已经配置好,并且项目中引入了相关的依赖。本文以 Spring Boot 项目为例,使用 Maven 来管理依赖。

1.1.添加依赖

        我们需要在对应微服务模块的 pom.xml 文件中添加 Spring Boot Easy Excel 的相关依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>4.0.2</version>
</dependency>

2.创建数据模型

        我们需要创建一个数据模型类,这个类将用来表示我们要导出的数据:

@Data
@TableName("port_info")
public class PortInfoModel implements Serializable {

    @Serial
    @TableField(exist = false)
    private static final long serialVersionUID = 1L;

    @TableId("port_id")
    @Schema(description = "港口编号")
    @ExcelProperty("港口编号")
    private String portId;

    @Schema(description = "港口名称")
    @ExcelProperty("港口名称")
    private String portName;

    @Schema(description = "港口状态")
    @ExcelProperty("港口状态")
    private String portStatus;
    
}

这里博主用了 Lombok 的注解自动生成 Getter、Setter、toString 方法;

@TableName、@TableId、@TableField是 MyBatis-Plus 中的注解:

Spring Cloud 集成 MyBatis/MyBatis-Plus 请参考:Spring Cloud微服务项目集成MyBatis

@Serial 是 Swagger 中的注解:

Spring Cloud 集成 Swagger 请参考:Spring Cloud微服务项目聚合Swagger文档

3.创建导出服务

        接下来,我们创建一个服务类,负责生成 Excel 文件并将其返回给客户端:

/*
 * 这里博主将整个方法封装好,以便后续的复用
 */
public class ExportFileTools {

    public static <T> void exportExcel(HttpServletResponse response, List<T> list, Class<T> clazz) {
        LocalDate currentDate = LocalDate.now();
        String fileName = currentDate.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ".xlsx";

        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), clazz).build()) {
            WriteSheet writeSheet = EasyExcel.writerSheet("sheet1").build();
            excelWriter.write(list, writeSheet);
        } catch (java.io.IOException e) {
            // Handle the exception, e.g., log it or send an error response
            throw new RuntimeException(e);
        }
    }
}

3.在Controller层进行调用

        最后,我们需要创建一个控制器类来处理 HTTP 请求,并调用导出服务:

@RestController
@RequestMapping("/api/auth/system/port")
@Tag(name = "港口管理")
public class PortController {

    private final PortService portService;

    @Autowired
    public PortController(PortService portService) {
        this.portService = portService;
    }


    @PostMapping("/export")
    @Operation(summary = "导出数据", parameters = {
            @Parameter(
                    name = "Authorization",
                    description = "TOKEN",
                    in = ParameterIn.HEADER,
                    required = true,
                    schema = @Schema(type = "string")
            )
    })
    @Log(title = "导出数据", businessType = BusinessType.OTHER)
    public void exportExcel(@RequestBody PortInfoModel model, HttpServletResponse response) {
        /* 对导出的数据做一个查询 */
        LambdaQueryWrapper<PortInfoModel> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(model.getPortName() != null, PortInfoModel::getPortName, model.getPortName());
        List<PortInfoModel> list = portService.getBaseMapper().selectList(queryWrapper);
        /* 调用我们先前封装好的函数 */
        ExportFileTools.exportExcel(response, list, PortInfoModel.class);
    }

}

4.接口测试

        博主这里因为配置了Swagger,所以直接在Swagger上进行接口测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shellcode汇编复习

shellcode汇编复习 一、 汇编代码复习二、 基础寄存器1. EAX (Accumulator Register)2. EBX (Base Register)3. ECX (Count Register)4. EDX (Data Register)5. ESI (Source Index Register)6. EDI (Destination Index Register) 二、 基础指令1. mov - 数据传送2. add - 加法3…

vue js 前端同时下载多个文件,前端多文件下载

在日常需求中&#xff0c;一般情况下&#xff0c;单次点击下载文件数量一般是一个&#xff0c;当然也有多个文件同时下载的需求&#xff0c;由于浏览器机制&#xff0c;不支持直接多个文件下载&#xff0c;所有需要特殊处理 案例图 不多说了&#xff0c;直接上代码 //下载文…

Transformer经典模型实战:零基础训练一个面向中文的T5模型(Text to Text Transfer Transformer)

scient scient一个用python实现科学计算相关算法的包&#xff0c;包括自然语言、图像、神经网络、优化算法、机器学习、图计算等模块。 scient源码和编译安装包可以在Python package index获取。 The source code and binary installers for the latest released version ar…

景联文科技提供语音采集服务:开启智能交互新纪元

随着人工智能技术的飞速发展&#xff0c;语音交互已成为连接人与智能设备的重要桥梁。无论是智能助手、智能家居还是自动驾驶汽车&#xff0c;语音识别技术都是其背后不可或缺的核心力量。 为了满足各行各业对高质量语音数据的需求&#xff0c;景联文科技凭借自身强大的数据采集…

XGen —— 导入Hou

动力学解算 选择description&#xff0c;转化为交互式Groom&#xff1b; 选择description&#xff0c;将引导线转化为曲线&#xff1b; 添加linearWire&#xff0c;并选择转化后的曲线生成解算线 选择上述生成的解算线&#xff0c;创建动力学&#xff1b; 导出解算的Xgen 导出a…

Edge SCDN:构建更快更安全的网络世界

什么是Edge SCDN&#xff1f; Edge SCDN&#xff0c;即边缘安全加速&#xff0c;是一种结合了传统CDN&#xff08;内容分发网络&#xff09;技术与网络安全防护功能的服务。传统的CDN通过在全球范围内分布服务器节点来加速网站内容的分发&#xff0c;提高访问速度和用户体验。…

备考计算机二级Python之Day4作业编程题

1、输入一个年份&#xff0c;输出是否为闰年。 #闰年条件&#xff1a;能被4整除但不能被100整除&#xff0c;或者能被400整除的年份都是闰年。 neval(input("请输入一个年份&#xff1a;")) if (n%40 and n%100!0) or (n%4000):print("该年份是闰年") els…

68 H3C SecPath F1000 (系统模块介绍-1)

68 H3C SecPath F1000 &#xff08;系统模块介绍&#xff09; 01-高可靠性 特性简介 高可靠性&#xff08;High Availability&#xff09;&#xff0c;简称为HA&#xff0c;能够在通信线路或设备产生故障时提供备用方案&#xff0c;当其中一个网络节点发生故障时&#xff0c…

生信是什么?生物信息学的基础概念与应用领域-生信圆桌

介绍 生信&#xff0c;全称为生物信息学&#xff08;Bioinformatics&#xff09;&#xff0c;是指将计算机科学、数学和统计学的方法应用于生物学数据的处理、分析和解释。随着基因组测序技术的发展和大规模生物数据的产生&#xff0c;生物信息学成为了生命科学研究中的一个核…

浅谈AI+工业视觉检测技术应用的优化

1 高质量替代人眼&#xff0c;助力智能制造 视觉是人类获取信息最主要的渠道&#xff0c;它使人们得以感知和理解周边的世界。通过视觉&#xff0c;人类可以感知外界物体的大小、明暗、颜色、动静&#xff0c;获得对机体生存具有重要意义的各种信息。人类的大脑皮层约有70%都在…

arthas源码刨析:arthas 命令粗谈(3)

文章目录 dashboardwatchretransform 前面介绍了 arthas 启动相关的代码并聊了聊怎么到一个 shellserver 的建立。 本篇我们来探讨一下几个使用频次非常高的命令是如何实现的。 dashboard 想看这个命令的主要原因是编程这些年来从来没有开发过 terminal 的这种比较花哨的界面&a…

最新出炉 -Web自动化测试之playwright:概述

概述 playwright是由微软开发的Web UI自动化测试工具&#xff0c; 支持Node.js、Python、C# 和 Java语言&#xff0c;本文将介绍playwright的特性以及它的简单使用。 playwright特性 playwright具有以下特点&#xff1a; 一、支持所有主流浏览器 支持所有主流浏览器&#x…

从开发到集成:视频美颜SDK与直播美颜API详解

在本文中&#xff0c;我们将详细探讨视频美颜SDK的开发过程及其与直播美颜API的集成方案&#xff0c;帮助开发者更好地理解和应用这些技术。 一、视频美颜SDK的开发概述 视频美颜SDK是一个用于实时视频处理的开发工具包&#xff0c;提供了包括磨皮、美白、瘦脸、眼睛放大等多…

各类软件历史版本的下载地址

postman,notpad等 https://www.filehorse.com/software-developer-tools/https://www.filehorse.com/software-developer-tools/

数业智能心大陆AI大模型,共情陪伴你的心理健康

大模型的出现&#xff0c;使得AI在语音识别、自然语言处理、计算机视觉等领域的性能得到了极大的提升&#xff0c;随着硬件设备的不断升级和优化&#xff0c;以及算法的不断改进&#xff0c;大模型的规模和性能也在不断提升&#xff0c;大模型的优势在于其强大的表示能力和泛化…

不愿回流上班,离职博主们不断寻找新的“栖息地”

文 | 螳螂观察 作者 | 如意 “替大家试过了&#xff0c;不上班真的很爽。” “985本硕&#xff0c;年薪40万裸辞了。” “不干了&#xff0c;谁家好人半夜12点还在司啊&#xff01;” 标题熟悉吧&#xff1f;对&#xff0c;这拨人你一定看到了&#xff0c;说人生是旷野&am…

45+用户占比近30%,网文产业如何赋能IP长链?

网文市场加速发展&#xff0c;巨头抢占中老年用户 作者&#xff5c;吕娆炜 排版&#xff5c;张思琪 干货抢先看 1. 我国网文产业市场规模突破3000亿元&#xff0c;在用户方面&#xff0c;截至2023年底&#xff0c;我国网文用户数量达5.37亿&#xff0c;同比增长9%&#xff0c…

【FreeRTOS】信号量

0 前言 学习视频&#xff1a; 【FreeRTOS入门与工程实践 --由浅入深带你学习FreeRTOS&#xff08;FreeRTOS教程 基于STM32&#xff0c;以实际项目为导向&#xff09;】 【精准空降到 00:42】 https://www.bilibili.com/video/BV1Jw411i7Fz/?p39&share_sourcecopy_web&…

源2.0-M32大模型发布4bit/8bit量化版! 运行显存仅需23GB,性能可媲美LLaMA3

近日&#xff0c;浪潮信息发布源2.0-M32大模型4bit和8bit量化版&#xff0c;性能比肩700亿参数的LLaMA3开源大模型。4bit量化版推理运行显存仅需23.27GB&#xff0c;处理每token所需算力约为1.9 GFLOPs&#xff0c;算力消耗仅为同等当量大模型LLaMA3-70B的1/80。而LLaMA3-70B运…

删除Eureka注册中心已经注册的服务

1.登录Eureka查看需要删除的服务。 2.使用postman或者apipost工具&#xff0c;请求方式DELETE, 接口地址输入&#xff1a;eureka的ip地址/eureka/apps/ Application / Status 例如: http://192.168.194.60:8761/eureka/apps/VUE-MANAGER-SERVICE/10.42.0.138:vue-manager…