当前位置: 首页 > news >正文

可以直接打开的网站正能量127.0.0. wordpress

可以直接打开的网站正能量,127.0.0. wordpress,东营网站建设课程定位优化,软件开发服务器目录 背景EasyExcel 问题分析与解决Spring Boot Excel 导入与导出 依赖引入Excel 导入 基本导入功能进阶导入功能Excel 导出 Excel 导入参数校验 开启校验 校验规则定义 Bean Validation 定义校验规则ExcelValidator 接口定义校验规则校验结果接收 异常捕获接收校验结果contro…目录 背景EasyExcel 问题分析与解决Spring Boot Excel 导入与导出 依赖引入Excel 导入 基本导入功能进阶导入功能Excel 导出 Excel 导入参数校验 开启校验 校验规则定义 Bean Validation 定义校验规则ExcelValidator 接口定义校验规则校验结果接收 异常捕获接收校验结果controller 方法参数接收校验结果总结 背景 Excel 导入与导出是项目中经常用到的功能在 Java 中常用 poi 实现 Excel 的导入与导出。由于 poi 占用内存较大在高并发下很容易发生 OOM 或者频繁 fullgc阿里基于 poi 开源了 EasyExcel 项目。 除了节约内存EasyExcel 还简化了 API通过注解映射 Excel 单元格与对象字段之间的关系简单的几行代码就能搞定复杂的导入导出功能了。 EasyExcel 问题 看似一切美好不过经常做 Excel 导入与导出就会发现EasyExcel 还是没那么完美的。 首先导入与导出 Excel 本质是上将 Excel 文件内容与 Java 对象之间做一个映射EasyExcel 做的只是在这两者之间转换。如果项目中的 Excel 导入与导出功能比较多会产生大量的样板式代码使用体验类似于 JDBC。 另外导入往往还伴随着校验这是 EasyExcel 没有支持的功能。如果需要校验要么写代码手动判断要么调用 Java Validation 规范 定义的 API 判断这又会产生大量样板式代码。 而且当前 spring boot 已经成了必备的 Java 开发框架easyexcel 也没有进行整合。 分析与解决 导入与导出通常发生在 Web 环境对于 Spring MVC 来说可以将请求信息转换为任意类型的 contoller 方法参数将 controller 方法返回值转换为客户端支持的内容。 如果能够使用自定义的 controller 方法参数接收 Excel 文件内容将 controller 方法返回值转换为 Excel 文件响应可以直接消除 Excel 导入与导出时的样板式代码。 另外在将请求内容转换为 controller 方法参数时还可以加入自定义的校验逻辑。 由于 Excel 导入与导出样板式代码、校验问题与具体的业务逻辑无关可以单独抽象出来我这里在 EasyExcel 的基础上封装了一个 easyexcel-spring-boot-starter 的项目大大降低了 EasyExcel 上手的门槛对用户来说只需要使用 EasyExcel 定义的注解提供映射关系就可以了适用于简单场景的导入导出。 项目代码已上传 github easyexcel-spring-boot-starter 仓库点击链接即可查阅。下面就来看看怎样使用吧。 Spring Boot Excel 导入与导出 依赖引入 首先需要引入依赖坐标如下。 ? 1 2 3 4 5 dependency     groupIdcom.zzuhkp/groupId     artifactIdeasyexcel-spring-boot-starter/artifactId     version1.0-SNAPSHOT/version /dependency 不过很不幸的是目前还没传至中央仓库需要的小伙伴可自行上传到私有仓库或直接把代码嵌入自己的项目。 Excel 导入 首先看下要导入的 Excel 内容吧。 为了接收 Excel 文件内容我们需要定义一个对应的 Model 类。 ? 1 2 3 4 5 6 7 8 9 10 11 Data public class DemoData {     ExcelProperty(index 0)     private Integer integer;     ExcelProperty(index 1)     private String string;     ExcelProperty(index 2)     private Date date; } 基本导入功能 然后使用 ListT 参数接收即可。 ? 1 2 3 4 PostMapping(/list/obj) public ListDemoData listObj(ExcelParam ListDemoData list) {     return list; } 注意参数前添加了 ExcelParam 注解用来标识 Excel 文件参数。这样一个导入功能实现了是不是很简单呢 默认情况下接收名称为 file 的表单字段作为 Excel 文件如果不满足还可以修改。 ? 1 ExcelParam(value file, required true) 进阶导入功能 有时候我们可能比较关心对象对应 Excel 的元数据例如这个对象是第几行记录产生的这个对象的字段对应 Excel 第几列这个时候我们可以使用 ReadRowsT 参数接收 Excel。 ? 1 2 3 4 PostMapping(/list/rows) public ReadRowsDemoData readRows(ExcelParam ReadRowsDemoData readRows) {     return readRows; } ReadRows 使用两个字段记录行映射关系与列映射关系。 ? 1 2 3 4 5 6 public class ReadRowsT {     private ExcelReadHeadProperty excelReadHeadProperty;     private ListReadRowT rows; } ExcelReadHeadProperty 是 EasyExcel 自带的类表示列映射关系的元数据。ReadRow 是框架自定义的类表示行映射关系的元数据。 看下 ReadRow 定义吧。 ? 1 2 3 4 5 6 7 8 public class ReadRowT {     // 行索引从 0 开始     private final Integer rowIndex;     // 行记录对应对象     private final T data; } 使用 ExcelReadHeadProperty 获取字段对应列索引的示例代码如下。 ? 1 2 3 // 对象字段名称 - 从 0 开始的列索引 MapString, Integer fieldColumnIndexMap readRows.getExcelReadHeadProperty().getHeadMap().values()         .stream().collect(Collectors.toMap(Head::getFieldName, Head::getColumnIndex)); Excel 导出 这里对 Excel 的导出进行了简单的支持。将 ListT 定义为 controller 方法返回值即可。 ? 1 2 3 4 5 ExcelResponse GetMapping(/list/download) public ListDemoData downloadList() {     return Arrays.asList(new DemoData(1, hello, new Date()), new DemoData(2, excel, new Date())); } 需要注意的是使用 ExcelResponse 注解表示响应内容为 Excel 文件。默认情况下载的文件名称为 default.xlxs写入到名称为 Sheet1 的工作表中。如果不满足需求可以修改。 ? 1 ExcelResponse(fileName 测试文件, sheetName 工作表1) Excel 导入参数校验 参数校验是 Excel 导入常用的功能这里进行了强有力的支持使用体验如原生 spring boot 校验般顺滑。 开启校验 与 spring boot 原生使用方式一样将 Validated 或 Valid 注解添加到 ExcelParam 参数上即可。 ? 1 2 3 4 PostMapping(/list/obj) public ListDemoData listObj(ExcelParam Validated ListDemoData list) {     return list; } 校验规则定义 Bean Validation 定义校验规则 默认情况下框架使用 JSR-303 Bean Validation 规范定义的校验注解校验需要手动引入 spring-boot-starter-validation可通过设置环境变量 easyexcel.validator.default.enablefalse 关闭。 ? 1 2 3 4 5 6 7 8 9 Data public class DemoData {     NotNull(message 参数不能为空)     private Integer integer;     private String string;     private Date date; } 另外还可以自定义注解对对象校验。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 省略其他元注解 Constraint(validatedBy {DemoDataValid.DemoDataValidator.class}) public interface DemoDataValid {         ... 省略注解属性               class DemoDataValidator implements ConstraintValidatorDemoDataValid, DemoData {         Override         public boolean isValid(DemoData value, ConstraintValidatorContext context) {             context.disableDefaultConstraintViolation();             context.buildConstraintViolationWithTemplate(测试对象校验).addConstraintViolation();             return false;         }     } } ? 1 2 3 4 DemoDataValid public class DemoData {     ... 省略属性 } ExcelValidator 接口定义校验规则 Bean Validation 注解只能校验单个字段或对象如果需要对所有的对象进行校验可以实现框架定义的 ExcelValidator 接口然后将实现定义为 Spring Bean。 这个接口定义如下。 ? 1 2 3 public interface ExcelValidatorT {     ExcelValidErrors validate(ReadRowsT readRows); } ExcelValidErrors 用于接收校验的错误信息分别使用接口 ExcelValidObjectError 和 ExcelValidFieldError 接口定义行错误信息和单元格错误信息。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class ExcelValidErrors {     // 行错误信息或单元格错误信息列表     private final ListExcelValidObjectError errors; } public interface ExcelValidObjectError {     // 获取行号从 1 开始     Integer getRow();     // 获取错误消息     String getMessage(); } public interface ExcelValidFieldError extends ExcelValidObjectError {     // 获取列从 1 开始     Integer getColumn(); } 例如如果需要对所有的 DemoData 校验 integer 字段的值不能重复可以使用如下的代码。 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Component public class CustomExcelValidator implements ExcelValidatorDemoData {     Override     public ExcelValidErrors validate(ReadRowsDemoData readRows) {         ExcelValidErrors errors new ExcelValidErrors();         MapInteger, ListReadRowDemoData group readRows.getRows().stream()                 .collect(Collectors.groupingBy(item - item.getData().getInteger()));         for (Map.EntryInteger, ListReadRowDemoData entry : group.entrySet()) {             if (entry.getValue().size() 1) {                 for (ReadRowDemoData readRow : entry.getValue()) {                     errors.addError(new DefaultExcelObjectError(readRow.getRowIndex() 1, 参数重复));                 }             }         }         return errors;     } } 校验结果接收 与 Spring MVC 设计类似这里也提供了两种接收校验结果的方式。 异常捕获接收校验结果 开启校验后如果校验结果中包含错误会将错误信息封装到 ExcelValidException并抛出异常可以通过全局异常捕获的方式收集错误信息。 ? 1 2 3 4 5 6 7 8 RestControllerAdvice public class GlobalExceptionControllerAdvice {     ExceptionHandler(ExcelValidException.class)     public String handleException(ExcelValidException e) {         ExcelValidErrors errors e.getErrors();         return JSON.toJSONString(errors);     } } controller 方法参数接收校验结果 如果不想通过异常捕获的方式接收校验的错误信息还可以将错误信息添加到 ExcelParam 参数的后面示例代码如下。 ? 1 2 3 4 5 6 7 8 PostMapping(/list/obj) public ListDemoData listObj(ExcelParam Validated ListDemoData list, ExcelValidErrors errors) {     if (errors.hasErrors()) {         String messages errors.getAllErrors().stream().map(ExcelValidObjectError::getMessage).collect(Collectors.joining( | ));         throw new RuntimeException(发现异常: messages);     }     return list; } 总结 easyexcel-spring-boot-starter 综合应用了前面文章介绍的各种 Spring 知识代码量并不大对实现感兴趣的小伙伴可自行查阅代码。由于这个框架是把 Excel 中所有的行数据收集到内存因此只适合一些比较简单的场景。
http://www.huolong8.cn/news/215608/

相关文章:

  • 如何删除网站备案号wordpress字体抖动
  • 地方招聘网站如何做推广网站多数关键词
  • 网站域名怎么免费获取5000元可注册劳务公司吗
  • 国外网站做freelancer电子商务做网站设计
  • 织梦移动端网站建设做网站教学
  • 恒基建设集团网站广东网页设计
  • 济南网站制做网站建设通报
  • 荆州做网站公司郑州百度网站建设
  • 企业网站一般内容包括哪些wordpress文章默认经典
  • 医院可以做网站吗在本地做装修在那个网站好
  • 网站搜索引擎关键字怎么做网站建设w亿玛酷1流量订制
  • 做网站什么语言最好青海省公路建设管理局官方网站
  • 上海市建设安全协会官方网站企业信用信息查询公示系统浙江
  • 营销型公司网站佛山网站建设公司大全
  • 网页制作与设计站点应该怎么建手机网站开发解决方案
  • 马鞍山网站设计价格游戏网站怎么赚钱
  • 网络营销推广的概念鲨皇seo
  • 学校网站建设整改报告有做网站设计的吗
  • 做网站需要注意事项哈尔滨做网站建设
  • 南京疾控最新通告今天网站搜索引擎优化工具
  • apache添加网站网页版传奇有哪些
  • 网上做图赚钱的网站用网站做淘客怎么做
  • 推荐做微商海报的网站怀化市建设局门户网站
  • 邯郸开发网站有哪些网站包括哪些内容
  • 广西医院响应式网站建设方案网店服务平台
  • 专门做网站的公司与外包公司有哪些学校网站制作素材
  • 广州市做网站的桂林到阳朔多少公里
  • 电子商务网站制作南昌网站建设模板服务商
  • 从网站优化之角度出发做网站策划希爱力双效片
  • 南宁做网站比较好的公司如何做好阿里巴巴企业网站建设