上篇文章已经介绍了自定义LocalDateTime转换器解决了LocalDateTime导入导出的问题!

那么这篇文章继续介绍一下性别转换的问题,一般我们代码中都会使用 1/0 分别代表 男/女 ,可是Excel中都是用"男","女"表示的,怎么做才能 单独将性别转化为1和0 呢?没错还是自定义转换器!
因为这个案例有LocalDateTime,所以请查看上篇文章采取任意一种解决方案,建议采用第二种:


新建User类,然后在类上添加EasyExcel的注解

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {@ExcelProperty(value = "姓名", index = 0)private String name;@ExcelProperty(value = "年龄", index = 1)private Integer age;// 1 男   0 女@ExcelProperty(value = "性别", index = 2)private Integer sex;@ExcelProperty(value = "创建时间", index = 3)private LocalDateTime createTime;
}

新建Controller用于测试

@Slf4j
@RestController
public class ExcelController {@PostMapping("/importData")public void importData(@RequestParam("file") MultipartFile file) throws IOException {if (file == null) return;ArrayList<Object> list = new ArrayList<>();AnalysisEventListener listener = new AnalysisEventListener() {@Overridepublic void invoke(Object data, AnalysisContext context) {list.add(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {log.info("导入数据完毕");}};try {EasyExcel.read(file.getInputStream(), User.class, listener).sheet(0).doRead();} catch (IOException e) {log.error("导入出错:{}", e.getMessage());}list.forEach(System.out::println);}@PostMapping("/exportData")public void exportData(HttpServletResponse response) {List<User> list = getList();try {response.setContentType("application/vnd.ms-excel; charset=utf-8");response.setCharacterEncoding("utf-8");String fileName = "三好学生表";response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8") + ".xlsx");EasyExcel.write(response.getOutputStream(), User.class).registerConverter(new LocalDateTimeConverter()).sheet("test").doWrite(list);} catch (Exception e) {log.error("下载报表异常:{}", e.getMessage());throw new RuntimeException("下载报表异常");}}private List<User> getList() {List<User> list = new ArrayList<>();LocalDateTime now = LocalDateTime.now();User xd = new User("熊大", 10, 1, now);User ne = new User("牛二", 20, 0, now);User zs = new User("张三", 30, 1, now);User ls = new User("李四", 40, 1, now);User ww = new User("王五", 50, 0, now);list.add(xd);list.add(ne);list.add(zs);list.add(ls);list.add(ww);return list;}
}

访问exportData接口会发现不是我们想要的结果:为什么导出的文件性别那一列只有0 1 没有男 女呢?好吧!那我们就自定义转换器,因为我们要转换0和1即Integer,所以编写如下转换器!注意要实现的是com.alibaba.excel.converters.Converter接口,别引用错包了!

public class SexConverter implements Converter<Integer> {@Overridepublic Class supportJavaTypeKey() {return Integer.class;}@Overridepublic CellDataTypeEnum supportExcelTypeKey() {return CellDataTypeEnum.STRING;}@Overridepublic Integer convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return "男".equals(cellData.getStringValue()) ? 1 : 0;}@Overridepublic CellData convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {return new CellData(value.equals(1) ? "男" : "女");}
}

划重点!Sex的converter编写完了,怎么才能让它生效呢?有一种解决方案!

  1. 找到需要转换的字段,在@ExcelProperty上添加converter属性

修改代码完毕之后再重启就可以了,不管是导入还是导出都没问题!Excel中的男/女导入之后在代码中会自动变为1/0,代码中的1/0导出之后会自动变为男/女!赶快试试吧!

细心的小伙伴已经发现了,LocalDateTime的converter有三种生效方案,但是sex的converter只有一种!点击查看Converter使用总结并带你追踪一下源码并给出具体的解决方案!

加油!

EasyExcel自定义Converter解决性别转换问题相关推荐

  1. Java开发日志 - EasyExcel自定义类型转换、Excel表头字段问题

    1. EasyExcel自定义数据转换 EasyExcel 是阿里的一个用来读取和写入excel的库, 因为项目需要, 所以我需要从前端上传excel文件, 然后导入到数据库中 1.1 自定义转换类 ...

  2. blue html中转换,BlueFox Free PDF to HTML Converter(PDF文件转换软件)

    BlueFox Free PDF to HTML Converter是一款pdf文件转换软件,能直接查看PDF文件和对PDF文件进行编辑,支持批量进行转换,使用非常方便,操作简单,有需要可以下载. 软 ...

  3. vmware 解决二进制转换与此平台上的长模式不兼容

    https://my.vmware.com/cn/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0   ...

  4. 人脸性别转换APP有什么?快把这些APP收好

    小伙伴们平时在社交媒体上,有没有刷到过网友分享的一些搞笑照片,有些照片是性别反转.有些是换脸变装.有些是时光机,都很有趣.那你们是否也想自己制作一些类似性别反转的照片,但是苦于不知道用什么软件制作呢? ...

  5. docx批量转换成html,Batch DOCX to HTML Converter(批量docx转换HTML工具)

    Batch DOCX to HTML Converter 功能强大,能够将docx文件转换为html格式,支持批量转换,转换的速度很快,操作也很简单,通过软件转换的html网页格式更加方便用户进行网页 ...

  6. 怎么解决pdf转换成cad格式呢?

    在我们工作中,难免需要将PDF文件转换成CAD图纸,这毕竟两种完全不同格式的文件要转换起来,不了解操作方法感觉挺难的.那么如何快速解决pdf转换成cad格式呢? PDF的特点是在任何平台都等同于原稿, ...

  7. 自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题

    自定义MyHttpServletRequest解决过滤器拦截@RequestBody整体JSON请求问题 参考文章: (1)自定义MyHttpServletRequest解决过滤器拦截@Request ...

  8. 如何利用CycleGAN实现男女性别转换

    介绍 CycleGAN网络具有很强大的风格迁移功能.能够实现非常深层次的风格转换.比如男性图片女性化或者女性图片男性化. 先上效果图: 下面简单谈一谈实现原理. 网络结构 网络结构如图所示,通过两个循 ...

  9. php自定义函数数学计算,ThinkPHP自定义函数解决模板标签加减运算的方法

    本文实例讲述了ThinkPHP自定义函数解决模板标签加减运算的方法.分享给大家供大家参考.具体如下: 实际项目中,我们经常需要标签变量加减运算的操作.但是,在ThinkPHP中,并不支持模板变量直接运 ...

最新文章

  1. 对于数据库中表示状态或类型字段表示方法的思考
  2. okhttp连接池_OkHttp配置HTTPS访问+服务器部署
  3. 又翻出来老电视剧看了看....
  4. CodeForces 501B——Misha and Changing Handles
  5. 【文末赠书】牛顿:伸向未知量的利爪
  6. 57 FI配置-财务会计-固定资产-资产数据传输-定义传输日期和附加参数
  7. 前端经常遇到的跨域问题几种解决方案
  8. opengl绘制刻度坐标系_OpenGL中的坐标系-2D
  9. 百家号在线视频编辑器的技术演进
  10. 离散数学思维导图笔记
  11. [配套工具] 【新手福音】最简单的大漠插件注册方法 只需四行代码 每行附有详细说明
  12. 劳伦斯.拉里.埃里森(甲骨文公司总裁)在耶鲁大学的演讲稿
  13. HW算法题:判断字符串子序列
  14. ESP32+DHT11+Arduino连接phpstudy的本地数据库
  15. 巴菲特致股东的一封信:2003年
  16. 通过ICursor对Table进行操作(添加、修改、删除)
  17. 国内顶尖的量化投资团队有哪些?
  18. Oracle Demo库默认用户/密码为什么叫Scott/Tigger?
  19. Python金融系列第八篇:Fama-French 多因子模型
  20. linux系统下,利用appnode和kodexplorer搭建一个私有网盘

热门文章

  1. 【Android TV 开发】-->Leanback 中 VerticalGridSupportFragment 的使用
  2. 惠普台式电脑引导不了系统_惠普电脑开机没有USB启动项怎么办
  3. php strtotime月底,php strtotime 大小月问题
  4. 复合化计算机,复合式制图中计算机技术的应用方式
  5. 客户管理信息系统html,一个简易的客户管理信息系统
  6. Android-Skillful-Craftsman(Android能工巧匠)
  7. 解决Android中WebView跳转到浏览器的问题
  8. 什么是 Git? - 探索分布式版本控制工具
  9. QCon北京2018圆满结束,探索前沿技术最佳实践
  10. 这一周,全世界都兴奋麻了!