Spring Cloud + Easy Excel导出表格

        在现代应用开发中,数据的导出和处理是一个非常常见的需求。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上进行接口测试:

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洛*璃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值