数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇_第1张图片

历史文章(文章累计460+)

《国内最全的Spring Boot系列之一》

《国内最全的Spring Boot系列之二》

《国内最全的Spring Boot系列之三》

《国内最全的Spring Boot系列之四》

《国内最全的Spring Boot系列之五》

《国内最全的Spring Boot系列之六》

【EasyPoi实战系列】Spring Boot使用EasyPoi动态控制导出的列 - 第471篇100万数据导出,居然爆炸了OutOfMemoryError?【EasyPoi实战系列】- 第472篇

导出下拉列表的两种小技巧【EasyPoi实战系列】- 第473篇

悟纤:师傅,看你最近都没有动静了。EasyPoi导出是不是讲完了。

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇_第2张图片

师傅:那到没有,那些使用还没讲呢。

悟纤:还有什么?

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇_第3张图片

师傅:比如数据脱敏、换行、枚举、模板文件导出等等等。

悟纤:居然还有这么多的知识要学习。容我消化下…

师傅:今天咱们先讲讲简单的,放松一下。

悟纤:师傅,那就赶紧开始吧。

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇_第4张图片

导读

在前面介绍了有关导出的很多方法和技巧,这一节针对数据脱敏、换行、枚举的情况在聊聊导出的数据处理。

一、换行

1.1 使用换行符号进行换行

首先可以指定换行符号\n进行换行,如下所示:

users.add(new UserExportVO("悟纤",1,new Date(),"18688888888","[email protected]",bytes,"公众号\nSpringBoot"));

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇_第5张图片

1.2 模板文件中

在使用 easypoi 模板导出表格时,可以使用 easypoi 提供的 br 函数来实现单元格内的强制换行。

比如:在导出的 Excel 模板中,使用 ${br(text)} 表示在 text 字符串内的每个换行符处换行。

至于如何使用模板文件进行导出,在下面的小节会进行介绍,这一节,先不展开进行讲解了。

二、数据脱敏

数据脱敏分为两种方法,一种是简单的,在注解或者ExcelExportEntity设置属性既可以,规则如下:

(1)规则1: 采用保留头和尾的方式,中间数据加星号

如: 身份证 6_4 则保留 370101********1234

手机号   3_4 则保留 131****1234

(2)规则2: 采用确定隐藏字段的进行隐藏,优先保留头

如: 姓名 1,3 表示最大隐藏3位,最小一位

李 --> *

李三 --> 李*

张全蛋  --> 张*蛋

李张全蛋 --> 李**蛋

尼古拉斯.李张全蛋 -> 尼古拉***张全蛋

(3)规则3: 特殊符号后保留

如: 邮箱1~@ 表示只保留第一位和@之后的字段

[email protected] -> a********@wupaas.com

复杂版本请使用接口{@link cn.afterturn.easypoi.handler.inter.IExcelDataHandler}即在数据接口自己处理脱敏规则,系统不单独处理。

常用脱敏规则如下,在注解使用比较简单:

  @Excel(name = "姓名", desensitizationRule = "1,6")    private String name;    @Excel(name = "身份证", desensitizationRule = "6_4")    private String card;    @Excel(name = "手机号", desensitizationRule = "3_4")    private String phone;    @Excel(name = "邮箱", desensitizationRule = "3~@")    private String email;

这样,就可以把之前的代码修改一下:

@Excel(name = "姓名",width = 15,desensitizationRule = "1,3")private String realName;//@Excel(name = "性别",replace = { "男_1", "女_2" }, suffix = "生")@Excel(name = "性别",replace = { "男生_1", "女生_2" }, addressList = true)//@Excel(name = "性别",dict = "sex",addressList = true)private Integer sex;@Excel(name = "出生日期",format = "yyyy-MM-dd",width = 15)private Date birthday;@Excel(name = "手机号码",width = 20,desensitizationRule = "3_4")private String phone;@Excel(name = "邮箱",width = 20,desensitizationRule = "1~@")private String email;

导出结果如下:

数据脱敏/换行/枚举的处理【EasyPoi实战系列】- 第474篇_第6张图片

三、枚举类型

实体对象属性是枚举支持几种处理模式,如下三总,最基础的无值数据,有值,以及有固定方法:

    private Sex sex; //第一种    @Excel(name ="基础状态" )    private StatusEnum baseStatus; //第二种    @Excel(name ="状态" , enumExportField = "message",                        enumImportMethod = "getByMessage")    private StatusEnum status;//第三种

对应的Sex枚举类:

public enum Sex {    /**     * 男     */    MAN,    /**     * 女     */    WOMAN}

对应的StatusEnum:

public enum StatusEnum {    Init(0, "初始化"),    Ready(1, "正常"),    ChangePassword(2, "需要修改密码"),    Frozen(4, "冻结"),    Disabled(64, "禁用");    private final Integer _code;    private final String _message;    StatusEnum(Integer code, String message) {        _code = code;        _message = message;    }    public Integer getValue() {        return _code;    }    public String getMessage() {        return _message;    }    public static StatusEnum getByMessage(String message){        StatusEnum[] arr =  StatusEnum.values();        for (int i = 0; i < arr.length; i++) {            if (arr[i]._message.equals(message)){                return arr[i];            }        }        return null;    }}

上面的第一种和第二种都是输出原有的值,MAN,Init等枚举值

第三种是输出对应的方法值,Easypoi适应反射调用getByMessage方法获取方法值

你可能感兴趣的:(EasyPoi,java,开发语言)