• SpringBoot中 Excel的下载


    一.搭建好好你的springBoot项目

    需要的依赖

    	<dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>3.1.0</version>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    二.开始配置

    2.1 Mybatis的写法

    2.1.1 实体类

    用到的注解
    @ExcelProperty(“职位编号”) 对字段进行注解,即导出的excel的目录一栏
    @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “Asia/Shanghai”) 日期格式注解
    @TableId(value = “id”, type = IdType.AUTO) 标注表的主键

    关键

    Serializable 开启流的接口
    private static final long serialVersionUID = 1L;相关的配置

    package com.huang.vhr.framework.web.entity;
    
    import com.alibaba.excel.annotation.ExcelProperty;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.fasterxml.jackson.annotation.JsonFormat;
    
    import java.io.Serializable;
    import java.time.LocalDateTime;
    
    /**
     * 

    * *

    * * @author 张三 * @since 2022-05-17 */
    public class Position implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) @ExcelProperty("职位编号") private Integer id; /** * 职位 */ @ExcelProperty("职位名称") private String name; @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai") @ExcelProperty("创建时间") private LocalDateTime createDate; @ExcelProperty("是否启用") private Boolean enabled; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public LocalDateTime getCreateDate() { return createDate; } public void setCreateDate(LocalDateTime createDate) { this.createDate = createDate; } public Boolean getEnabled() { return enabled; } public void setEnabled(Boolean enabled) { this.enabled = enabled; } @Override public String toString() { return "Position{" + "id=" + id + ", name=" + name + ", createDate=" + createDate + ", enabled=" + enabled + "}"; } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83

    2.1.2 Controller层

      @GetMapping("/export")
        public void download(HttpServletResponse response) throws IOException {
            // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("职位数据", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), Position.class).sheet("职位信息").doWrite(positionService.getAllpp());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.1.3 service层

    service
    List<Position> getAllpp();
    
    
    
    serviceImpl
     @Override
        public List<Position> getAllpp() {
            List<Position> positions = positionMapper.selectPageInfo();
            return positions;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2 Mybatis-plus的写法

    其实没有什么不同,只是controller的实现分页方法中的sql查询用了mybatis-plus的写法而已

    2.2.1 实体类

    package com.huang.vhr.framework.web.entity;
    
    import java.io.Serializable;
    import java.util.Date;
    
    import com.alibaba.excel.annotation.ExcelIgnore;
    import com.alibaba.excel.annotation.ExcelProperty;
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.fasterxml.jackson.annotation.JsonFormat;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.ToString;
    
    @Data
    @ToString
    @NoArgsConstructor
    public class Employeeremove implements Serializable {
        private static final long serialVersionUID = 1L;
        /**
         *
         */
        @TableId(value = "id", type = IdType.AUTO)
        @ExcelProperty("调动编号")
        private Integer id;
    
        /**
         *
         */
    
        @ExcelProperty("调动与主表关联")
        private Integer eid;
    
        /**
         * 调动后部门
         */
        @ExcelProperty("调动后部门")
        private Integer afterDepId;
    
        /**
         * 调动后职位
         */
        @ExcelProperty("调动后职位")
        private Integer afterJobId;
    
        /**
         * 调动日期
         */
        @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "Asia/Shanghai")
        @ExcelProperty("调动日期")
        private Date removeDate;
    
        /**
         * 调动原因
         */
        @ExcelProperty("调动原因")
        private String reason;
    
        /**
         *
         */
        @ExcelProperty("调动评语")
        private String remark;
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66

    2.2.2 controller层

       @GetMapping("/export")
        public void download(HttpServletResponse response) throws IOException {
            // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("utf-8");
            // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
            String fileName = URLEncoder.encode("职位数据", "UTF-8").replaceAll("\\+", "%20");
            response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
            EasyExcel.write(response.getOutputStream(), Employeeremove.class).sheet("职位信息").doWrite(employeeremoveService.list());
        }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.2.3

    service层

    service
     {
    public interface EmployeeremoveService extends IService<Employeeremove> {
    }
    
    
    serviceImpl
    @Service
    public class EmployeeremoveServiceImpl extends ServiceImpl<EmployeeremoveMapper, Employeeremove> implements EmployeeremoveService {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    注意:

    1.postman这种测试工具测试excel下载是可以成功的,但是没办法进行下载
    2.想要下载拿到文件的话你要通过浏览器
    3.excel下载的时候一定会涉及到权限的问题,怎么处理这个权限要考虑好,否则会报错

    在这里插入图片描述
    例如黄黄这里是把动态权限关掉了,然后配了一个放行。

    下载成功excel浏览图

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    MySQL快速安装(mysql8.0.30区别之前yum安装)
    初识Cpp之 一、基础知识
    208道Java中高级高频面试题(含答案)
    JVM G1收集器几个重要的概念
    如何做好建筑翻译呢
    【Python】条件语句、循环语句、pass语句的使用
    BugKu_MISC_(4)
    【XTDrone Ubuntu20.04】XTDrone+ Ubuntu20.04 + PX4安装
    十九章总结 Java绘图
    事务 @Transaction
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126055092