全栈低码开源框架 json-script-rule 导入

article/2025/5/3 3:53:41

说明

导入功能是将带有数据的excel文件上传后再通过程序导入到数据库,创建模型如下

@Data
public class JSRuleImport<A extends JSRuleAction<A>> implements IJSRuleActionModel<A>{/*** <p>导入excel对象,别名e* */@JsonAlias({"e"})@JSRuleCheckpublic JSRuleImportExcel<A> excel;

目前导入只做了excel的导入,其excel模型如下

@Data
public class JSRuleImportExcel<A extends JSRuleAction<A>> implements IJSRuleModel{/*** <p>导入sheet模型集合* */@JSRuleCheckpublic List<JSRuleImportSheet<A>> sheets;/*** <p>上传对象,必须存在的属性,如果导入前服务器上已经存在了所要导入的文件则需要在uploads中设置路径,如果没有则需要设置上传文件数据base64Data* */@JSRuleCheck(required=true)public JSRuleUpload<A> uploads;/*** <p>表示要导入的excel文件,暗属性,无法被json实例化,如果上传对象为空则会创建临时文件* */@JsonIgnorepublic File file;
}

这里我们看到JSRuleImportExcel模型和导出一样,它也有sheets属性,除此之外,它还有一个uploads属性,先上代码

@Data
public class JSRuleUpload<A extends JSRuleAction<A>> implements IJSRuleActionModel<A>,IZSFile{/*** <p>文件保存的路径,服务器的绝对路径,别名aPath* */@JsonAlias({"aPath"})public String absolutePath;/*** <p>文件保存的路径,服务器的相对路径,别名rPath* */@JsonAlias({"rPath"})public String relativePath;/*** <p>所要上传的文件数据,别名data,可先将文件或数据通过流转化成二进制字节数组,再用base64编码将字节数组转化成字符串放进该属性中,表示所要上传的文件* */@JsonAlias({"data"})public String base64Data;@Overridepublic final Object start(A action) {ZSIo.bytesToFile(Base64.getMimeDecoder().decode(action.getUploads().getBase64Data()),action.getUploads().getPath());return null;}
}
  • absolutePath:所要导入的excel文件在服务器上的绝对路径
  • relativePath:所要导入的excel文件在服务器上的相对路径
  • base64Data:数据流,文件字节码用base64编码成字符串后通过json请求框架的upload模型进行解析,最后通过bytesToFile方法将数据流写成文件并保存到服务器硬盘中,字符串流如下

"uploads":{"base64Data":"UEsDBBQACAgIAFZ1CVUAA......这里是很长的一个字符串
}

提示:导入时的upload模型中的路径属性所表示的是excel导入文件在服务器上的路径,这与单独使用upload模型时的路径属性含义略微有些不同,单独使用时路径属性表示的是存于服务器的哪个位置,而导入时则表示已经存在的excel文件的位置在哪

导入sheet模型有以下几个属性

  • action:此处非数组,可以通过这个属性来调用action动作模型,导入时只能选择add模型
  • headLine:导入sheet中的头行号,别名head,行号对应excel的行号,默认为第1行,其与映射信息类中的字段JSRuleField注解imports属性关联,用于配置列头与java字段的映射关系,也就是哪一列对应哪个字段。如@JSRuleRelationField(imports= {"名字","姓名"}),表示如果列名为上述两个,那么数据对应的字段为其注解下的java字段
  • dataLine:表示数据开始从哪一行进行加载,别名为start,默认为headLine+1
  • fieldMappings:动态的列名与java字段映射关系,别名为imports,key为sheet表格上的表头列名称,允许指定多个列名称映射同一个java字段,value为列名所映射的java字段名称。如果该属性为空,则默认使用映射信息类字段上的imports注解的值(包括带前缀和不带前缀的java字段名)

提示:如果有空行的数据可能会报错,这个时候需要配置application中的importFilterEmptyRow属性为true
提示:如果是mysql数据库,需要注意插入时各个行的列数是否一致,如果不一致还需要补全列才行,配置replenishColumns属性为true

edi:rule:open:replenishColumns: truepoi:excel:importFilterEmptyRow: true

接下来我们导出一个excel后打开它,看看导出后的excel能不能再直接导入(逻辑类似复制数据),下面是第一个sheet页

导入.jpg

发送json请求,如下

{"rule": {"name": "import","actions": [{"name": "test_import","imports": {"excel": {"uploads":{"aPath":"D:/response.xlsx"},"sheets": [{"head": 3,"start": 5,"action":{"name":"asddsa","add": {"class":"bao.ZsImport","uuid": ["id"],"required":["id"]}}},{"head": 2,"start": 4,"action":{"name":"qweewq","add": {"class":"ZsImport2"}}}]}}}]}
}

返回结果如下

{"code": 200,"msg": "操作成功","result": {"test_import": {"asddsa": 2,"qweewq": 1}},"log": null
}

可以看到我们返回的结果是个嵌套的序列化响应模型,这便是先前所讲的响应模型嵌套

扩展方法:导入模型提供了一个扩展方法preStartActions,在执行插入模型前执行,参数中包含了解析导入文件后的全部数据


此外由于导入插件模型复用了add插件模型,因此导入时还会走add的扩展方法,利用好这些扩展方法可以有效的对数据进行校验,之后再进行插入数据的操作

 


http://chatgpt.dhexx.cn/article/AX7lp4ZS.shtml

相关文章

Vue3 —— to 全家桶及源码学习

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 本篇主要学习几个 api 及相关源码&#xff1a; toReftoRefstoRaw 一、toRef toRef(reactiveObj, key) 接收两个参数&#xff0c;第一个是 响应式对象…

vue框架安装mock

mock是&#xff1a;通过随机数据,模拟各种场景。 开发无侵入 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。 用法简单 符合直觉的接口。 1、安装mock前先安装axios请求 &#xff1a;** npm install axios --save** 安装成功axios的链接&#xff1a; 2、安装mo…

【甄选靶场】Vulnhub百个项目渗透——项目十六:FristiLeaks_1.3(文件上传,py脚本改写,sudo提权,脏牛提权,源码获取)

Vulnhub百个项目渗透 Vulnhub百个项目渗透——项目十六&#xff1a;FristiLeaks_1.3&#xff08;文件上传&#xff0c;py脚本改写&#xff0c;sudo提权&#xff0c;脏牛提权&#xff0c;源码获取&#xff09; 靶场地址 &#x1f525;系列专栏&#xff1a;Vulnhub百个项目渗透…

vue全家桶——vuex

本文主要介绍vuex【状态管理模式】&#xff0c;在介绍vuex前&#xff0c;需要重点说下一些概念 vue最大的特点之一。数据驱动视图&#xff0c;可以吧数据理解成状态&#xff0c;视图-view可以理解成用户看到的页面&#xff0c;页面是动态变化的&#xff0c;而这个变化必须是有…

博客园滑块验证码破解

极验最初的滑块验证码是两张图&#xff0c;首先出现的是原图&#xff0c;点一下出现凹槽&#xff0c;然后拖动滑块进去&#xff0c;注意拖拽速度就可以破解成功。 原理&#xff1a; 分别遍历扫描原图和有凹槽的图片像素&#xff0c;进行对比&#xff0c;像素不一致的位置就是凹…

尚硅谷Vue2.0+Vue3.0全套教程视频笔记 + 代码 [P001-050]

视频链接&#xff1a;尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili P1-50&#xff1a;当前页面。 P51-100&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视频笔记 代码 [P051-100]_小白桶子的博客-CSDN博客 P101-135&#xff1a;尚硅谷Vue2.0Vue3.0全套教程视…

【Vue】Mock.js的使用教程,入门级(附代码和案例)

Mock.js的使用&#xff08;附代码和案例&#xff09; 1、什么是mockjs 生成随机数据&#xff0c;拦截Ajax请求 了解一项技术&#xff0c;官网当然要知道 Mock.js 官网 2、程序 前端&#xff1a;访问后端接口&#xff0c;展示数据后端&#xff1a;后端负责业务逻辑&#xff0c…

YDOOK:vue3.0: vue-cli4.5: 引入 Element PLUS 的正确方法 Vue-cli4.5 引入 element+ plus

YDOOK&#xff1a;vue3.0: vue-cli4.5: 引入 Element PLUS 的正确方法 Vue-cli4.5 引入 element plus 1. 官网的指导安装使用方式尚未更新&#xff0c;显示的是&#xff1a; 2. 如果使用的是 npm 安装, 输入的代码为&#xff1a; npm install element-plus --save大陆建议使用…

使用Xposed对软件进行破解

入门 去AS里面新建一个NoActivity项目&#xff0c;最好把minimum版本调小 <!-- 加载Xposed模块--><meta-dataandroid:name"xposedmodule"android:value"true" /> <!-- 模块描述--><meta-dataandroid:name"xpose…

破解root密码精简版

破解root密码精简版&#xff1a; 1、重启虚拟机 2、在linux16末尾加上 rd.break,ctrlx执行 3、mount -o remount,rw /sysroot 把根以读写的方式挂载 挂在系统的根sysroot 4、chroot /sysroot 5、passwd root 6、输入新密码&#xff1a; 7、确认密码 8、touch /.autorelabel 标…

【word论文排版教程4】样式的应用

【word论文排版教程4】样式的应用 在使用样式处选择相应样式&#xff0c;同样可以使用之前设置的快捷键 标题比较长&#xff0c;使用软回车进行换行

【word论文排版教程2】论文章节安排及分节

【word论文排版教程2】论文章节安排及分节 论文章节可分为如下8个章节&#xff1a; 封面 中文摘要 英文摘要 目录 正文 参考文献 附录 致谢 输入封面&#xff0c;添加分解符 添加分解符效果 同样方法为其它章节添加分解符。

【word论文排版教程1】页面设置

【word论文排版教程1】页面设置 页面设置要求如下&#xff1a; 页面格式&#xff1a;纸张A4&#xff0c;上2.6cm&#xff0c;下2.6cm&#xff0c;左2.5cm&#xff0c;右2cm&#xff0c;装订线位置左侧&#xff0c;装订线0cm&#xff0c;无文档网格 页面布局->页面设置

毕业必备!推荐收藏的学位论文排版教程(word完整版)

本文将介绍学位论文的页面布局&#xff0c;标题格式&#xff0c;文档生成列表&#xff0c;插入公式&#xff0c;页眉页脚&#xff0c;生成目录、表格和图片的交叉引用、插入参考文献、英语翻译校对等内容和技巧&#xff0c;学习内容偏多&#xff0c;同学们可以先收藏下来&#…

毕业论文word文档排版教程(动图的方式演示,针对wps)

很久之前写好的文章&#xff0c;不知不觉毕业了那么久了 目录 1 常用快捷键 2 显示全部格式标记 3 因有手动换行符无法实现首行缩进 4 利用表格制作矩阵 5 因有英文(代码)和中文而导致空隙过大 6 设置页码和目录 xx 参考文献自动编号并更新文章中的序号 xxx 页…

Latex基本使用:论文排版

文章目录 前言一、参考文献引用二、插入符号1.插入希腊字母2.插入符号 三、插入公式三、插入图片总结 前言 记录使用Latex排版论文的方法。 一、参考文献引用 引用参考文献使用的是bib文件&#xff0c;首先在tex文件所在目录下新建txt文件&#xff0c;修改后缀为bib。 在谷歌…

texlive2020 + vscode 论文排版教程

这是我准备公开的第二篇技术博客&#xff0c;之前也写过一些简单的&#xff08;拿不出手的&#xff09;博文&#xff0c;但一直没信心公开&#xff0c;不过最后觉得也没啥&#xff0c;大家可以交流嘛&#xff0c;万一你写的有错&#xff0c;有好心人看见了指出的话那也是极好的…

毕业论文排版教程(word)桂林电子科技大学

摘要&#xff1a;满心欢喜地给导数发去初稿&#xff0c;换来了一句“格式乱起八糟”&#xff0c;你是否还在为论文排版而苦不堪言&#xff0c;认真看完这份教程&#xff0c;让你轻松搞定毕业论文排版。 毕业论文排版教程&#xff08;word&#xff09;桂林电子科技大学 样式图片…

【word论文排版教程3】制作样式和列表

【word论文排版教程3】制作样式和列表 一级标题&#xff1a;黑体小二&#xff0c;居中&#xff0c;行距“固定值:20磅”&#xff0c;段前、段后均1行。 二级标题&#xff1a;黑体小三&#xff0c;无缩进&#xff0c;行距“固定值:20磅”&#xff0c;段前、段后均0.5行。 三级及…

Word论文排版教程

设置样式 要求&#xff1a; 以下以修改“大标题”为例&#xff0c;其他以此类推 1、大标题 再点击右下角的“段落” 2、标题4… 我们发现word默认只显示了三级标题的样式&#xff0c;如果我们还要更多的样式&#xff1a; &#xff08;选择“所有样式”即可&#xff09; …