SpringBoot 导出数据生成excel文件返回方式

yizhihongxing
  1. 准备工作

首先,我们需要在项目的依赖文件中添加对poi-ooxml的依赖,这样我们才能够在Java中读写Excel文件。

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.0</version>
</dependency>
  1. 实现Controller方法

为了导出Excel文件,我们需要实现一个Controller方法。下面是一个基本的实现。

@GetMapping("/download")
public void download(HttpServletResponse response) throws IOException {
    // 设置响应头信息,让浏览器可以识别出Excel文件
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment;filename=user.xlsx");

    // 创建工作簿
    XSSFWorkbook workbook = new XSSFWorkbook();

    // 写入数据
    XSSFSheet sheet = workbook.createSheet("用户信息");
    List<User> users = userService.getUsers();  // 获取用户数据
    int rowNum = 0;
    for (User user : users) {
        XSSFRow row = sheet.createRow(rowNum++);
        row.createCell(0).setCellValue(user.getId());
        row.createCell(1).setCellValue(user.getUsername());
        row.createCell(2).setCellValue(user.getEmail());
    }

    // 将Excel文件写入响应输出流
    workbook.write(response.getOutputStream());

    // 关闭工作簿
    workbook.close();
}

在上面的代码中,我们首先设置了响应头信息,以便浏览器可以正确地识别出Excel文件。然后创建了一个工作簿对象,在其中添加了我们需要导出的数据。最后将工作簿写入到响应的输出流中,以便将Excel文件返回给浏览器。

  1. 示例一

在下面的示例中,我们将展示如何获取一组用户的数据并将其写入Excel文件中。要实现这一点,我们需要在UserService类中编写一个方法来获取用户数据。

@Service
public class UserService {
    public List<User> getUsers() {
        // 此处略去获取数据的代码
        return users;
    }
}

我们还需要实现一个Controller方法来返回用户数据的Excel文件。

@GetMapping("/users/download")
public void download(HttpServletResponse response) throws IOException {
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment;filename=users.xlsx");

    // 创建工作簿
    XSSFWorkbook workbook = new XSSFWorkbook();

    // 写入数据
    XSSFSheet sheet = workbook.createSheet("用户信息");
    List<User> users = userService.getUsers();  // 获取用户数据
    int rowNum = 0;
    for (User user : users) {
        XSSFRow row = sheet.createRow(rowNum++);
        row.createCell(0).setCellValue(user.getId());
        row.createCell(1).setCellValue(user.getUsername());
        row.createCell(2).setCellValue(user.getEmail());
    }

    // 将Excel文件写入响应输出流
    workbook.write(response.getOutputStream());

    // 关闭工作簿
    workbook.close();
}

在这个示例中,我们首先从UserService中获取用户数据,然后将其写入Excel文件中。最后将Excel文件写入响应输出流中,以返回Excel文件。

  1. 示例二

在下面的示例中,我们将展示一个更高级的例子,该例子实现了将一个对象列表写入Excel文件中。

@GetMapping("/books/download")
public void download(HttpServletResponse response) throws IOException {
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment;filename=books.xlsx");

    // 创建工作簿
    XSSFWorkbook workbook = new XSSFWorkbook();

    // 写入数据
    XSSFSheet sheet = workbook.createSheet("图书信息");
    List<Book> books = bookService.getBooks();  // 获取图书数据
    int rowNum = 0;
    for (Book book : books) {
        XSSFRow row = sheet.createRow(rowNum++);
        row.createCell(0).setCellValue(book.getId());
        row.createCell(1).setCellValue(book.getName());
        row.createCell(2).setCellValue(book.getAuthor());
        row.createCell(3).setCellValue(book.getPrice());
    }

    // 将Excel文件写入响应输出流
    workbook.write(response.getOutputStream());

    // 关闭工作簿
    workbook.close();
}

在这个示例中,我们首先从BookService中获取图书数据,然后将其写入Excel文件中。通过Book对象的getter方法,我们获取了每一个Book对象的ID、名称、作者和价格,并将其写入Excel文件中。最后将Excel文件写入响应输出流中,以返回Excel文件。

总结:

以上就是SpringBoot导出数据生成Excel文件并返回的完整攻略。在实现这些例子时,我们首先设置了响应头信息,以允许浏览器正确识别Excel文件。然后,使用Apache POI库来实现Excel文件的创建和写入。最后,将Excel文件写入响应输出流中,以便可以将其作为响应返回给客户端。最后提醒一下,在响应完毕后,需要手动关闭Workbook,否则将导致内存泄漏问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 导出数据生成excel文件返回方式 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • SprintBoot深入浅出讲解场景启动器Starter

    SprintBoot深入浅出讲解场景启动器Starter 什么是场景启动器 Starter? 在 Spring Boot 中,Starter 是一种约定俗成的方式,可以将基础依赖项捆绑在一起,从而快速引导应用程序进入不同的场景。场景启动器通常使用以下命名约定:spring-boot-starter-* 。例如, spring-boot-starter-web…

    Java 2023年5月19日
    00
  • Maven多模块工程Module开发(图文教程)

    Maven多模块工程Module开发(图文教程)是一篇非常好的教程,它详细介绍了如何使用Maven进行多模块工程Module开发。下面是对该教程的完整攻略: 什么是多模块工程 多模块工程是一种由多个Maven项目组成的工程。每个子项目都独立的构建,然后这些子项目被一个父工程管理,父工程控制子项目的构建次序和构建参数。多模块工程是一种组织代码的方式,适合大型项…

    Java 2023年5月19日
    00
  • Ajax二级联动菜单实现原理及代码

    一、Ajax二级联动菜单实现原理 Ajax二级联动菜单是通过Ajax技术来实现的。具体实现过程如下: 通过JavaScript监听第一级菜单的改变事件; 使用XMLHttpRequest对象向服务器发送异步请求,获取第二级菜单的数据; 解析服务器返回的数据,生成第二级菜单选项; 将第二级菜单选项插入到HTML页面中。 二、Ajax二级联动菜单代码示例 下面是…

    Java 2023年6月15日
    00
  • 详解JNI到底是什么

    JNI全称为Java Native Interface,是Java语言与其他编程语言(如C、C++)进行交互的接口。JNI可以使Java程序通过调用本地(C、C++)编写的程序,实现高效的、与操作系统直接交互的功能。下面详细讲解JNI到底是什么,让你对JNI有更深刻的理解和认识。 什么是JNI? JNI是Java的一部分,是Java语言本身提供的一个开发工具…

    Java 2023年5月26日
    00
  • 手把手教你用Java实现一套简单的鉴权服务

    手把手教你用Java实现一套简单的鉴权服务 背景 鉴权服务可以帮助应用程序确认一个请求是否合法,从而保障应用程序的安全性。本攻略将介绍如何使用Java实现一个简单的鉴权服务。 步骤 1. 设计API 首先需要设计出鉴权服务的API。通常情况下,鉴权服务的API应该包括以下几个接口: login(username, password):用于用户登录,其中use…

    Java 2023年5月19日
    00
  • 如何实现Java线程安全问题

    Java线程安全是一个非常重要的问题,它涉及到在多线程情况下对共享资源的访问和操作。如果不注意线程安全问题,可能会导致数据混乱、竞态条件等问题。下面是一些实现Java线程安全的攻略: 1.使用同步方法和同步块 同步方法和同步块都可以用来实现线程安全。它们的核心思想是在多个线程访问共享资源时,只有一个线程能够访问这个资源,其他线程需要等待。具体实现方式如下: …

    Java 2023年5月26日
    00
  • JAVA中正则表达式匹配,替换,查找,切割的方法

    在Java中,可以使用正则表达式进行字符串匹配,替换,查找和切割等操作。使用正则表达式需要使用Java.util.regex包中的类。 正则表达式基本语法 正则表达式是一种特殊的字符串,可以用于描述匹配一个字符串的规则。正则表达式的基本语法如下: 1. 字符串 表示要匹配的字符串,例如 abc。 2. 字符集 表示可以匹配的字符集合,例如 [abc] 表示可…

    Java 2023年5月27日
    00
  • 实例详解java Struts2的配置与简单案例

    实例详解Java Struts2的配置与简单案例 简介 Java Struts2是MVC框架中的一种,它通过将应用程序分成模型、视图和控制器三个部分,从而使得开发人员能够更加清晰地组织代码并且更加容易地维护代码。 本文将会通过具体的操作步骤详细说明如何在Java Struts2中进行配置,并且给出两个简单的案例。 配置步骤 步骤一:下载和安装Java Str…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部