数据校验

easypoi导入Excel最佳实践

你离开我真会死。 提交于 2020-01-07 09:40:45
前言 本文原文链接地址:http://nullpointer.pw/easypoi%E5%AF%BC%E5%85%A5Excel%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.html 一直以来,使用EasyPOI做了不少导入导出的需求,但是每次做完都是临时去看官方文档现学现用,正巧最近朋友遇到这么个需求,用到了EasyPOI来完成导入,我也正好整理整理EasyPOI的导入用法。 本文原文链接地址:http://nullpointer.pw/easypoi%E5%AF%BC%E5%85%A5Excel%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.html 需求是这样的:现在要在后台导入用户的简历,简历的格式是这样子的: 一个人有多个属性,某些属性如申请职位、薪资是单一属性,即只会有一个值;某些属性如工作经历、教育经历、获奖情况是一组属性,可能会有多组值。现在要将这批简历数据导入到库中。 零、文件准备: 示例Excel以及示例Excel2 加入 EasyPOI 的依赖 <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.2.0</version> </dependency> 一

Vue组件缓存引起的表单校验问题

浪尽此生 提交于 2020-01-07 02:46:18
需求从列表页面跳转到详情页面,再切换到列表页面,列表页面需要保持跳转之前的状态,假设列表页面已被设置缓存 问题1:从列表页面单击list跳转到详情表单页面,表单出现红框提示(表单页面一进来就校验 ) 问题2:表单字段需要动态校验,编辑表单时显示不必填,新建表单时要显示必填 问题3:返回列表页面需要重新加载树形控件数据 问题4:页面跳转表单字段不清空,还是会保持上一次编辑过的数据 在mounted里面调用clearValidate() 方法来移除表单项的校验结果 根据状态更改required属性,watch监控属性变化更改校验 在列表页面监控路由属性变化重新调用获取树形数据的方法 在actived里面重新调用获取详情的方法,跳转路由后关闭当前页面,并且删除缓存路由,然后跳回列表页面,然后再从列表页面点编辑跳转编辑页面里面的表单是新的,给新建一样 来源: CSDN 作者: weixin_41697323 链接: https://blog.csdn.net/weixin_41697323/article/details/103842693

springboot + redis + 注解 + 拦截器 实现接口幂等性校验(转)

帅比萌擦擦* 提交于 2020-01-06 21:59:49
出处:   作者:wangzaiplus    www.jianshu.com/p/6189275403ed 一、概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等 二、常见解决方案 唯一索引 -- 防止新增脏数据 token机制 -- 防止页面重复提交 悲观锁 -- 获取数据的时候加锁(锁表或锁行) 乐观锁 -- 基于版本号version实现, 在更新数据那一刻校验数据 分布式锁 -- redis(jedis、redisson)或zookeeper实现 状态机 -- 状态变更, 更新数据时判断状态 三、本文实现   本文采用第2种方式实现, 即通过redis + token机制实现接口幂等性校验 四、实现思路 为需要保证幂等性的每一次请求创建一个唯一标识 token , 先获取 token , 并将此 token 存入 redis , 请求接口时, 将此 token 放到 header 或者作为请求参数请求接口, 后端接口判断 redis 中是否存在此 token : 如果存在, 正常处理业务逻辑, 并从 redis 中删除此 token

vue组件开发props验证的实现_vue.js_脚本之家

回眸只為那壹抹淺笑 提交于 2020-01-06 17:57:51
使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: 为什么要有props验证 但是上面这种方式是建立在大家都很遵守约定的情况下的,想象一下当有一个人要使用foo-component组件的时候,他可能对于其要接受的参数有什么要求并不是很清楚,因此传入的参数可能会在开发子组件的人的意料之外,程序就会发生错误,就像我们在函数调用之前先检查一下函数一样,props也可以进行一个预先检查。 平时调用函数的时候在函数开头的地方都是一坨糊糊的参数检查,这种写法很不好了,所有后来就有了校验器模式(别去百度了,我随口取的名字),校验器模式就是指把在函数开头的对参数校验的部分提取出来作为一个公共的部分来管理,让一个什么东西来专门负责校验,当类型不正确的时候就抛个异常根本不去调用这个函数,很多框架设计时都是这么设计的(Spring MVC、Struts2等等),props也提供了这个功能,想一下如果没有这个功能的话,为了保证正确性我们可能需要在每次使用props属性之前都写一坨代码来检查。校验器最大的好处就是大多数情况下我们只需要声明我需要什么样的数据,让校验器检查好了再塞给我。 type 可以使用type来声明这个参数可以接受的数据的类型,当检查规则只有一个的时候type可以略写: 当传入的参数类型不正确的时候Vue会发出提示:

RAID解读参考文档

断了今生、忘了曾经 提交于 2020-01-04 20:54:31
RAID 1、什么是RAID RAID:Redundant Arrays of Inexpensive(Independent) Disks 1988年由加利福尼亚大学伯克利分校(University of California-Berkeley) “A Case for Redundant Arrays of Inexpensive Disks”,多个磁盘合成一个“阵列”来提供更好的性能、冗余,或者两者都提供 RAID功能实现 : 提高IO能力,磁盘并行读写 提高耐用性,磁盘冗余算法来实现 RAID实现的方式 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成RAID控制器,安装OS前在BIOS里配置 软件RAID:通过OS实现 RAID级别 所谓raid等级,就是把多块硬盘组织一起,工作方式有所不同 RAID-0:条带卷,strip RAID-1:镜像卷,mirror RAID-2 … RAID-5 RAID-6 RAID-10 RAID-01 RAID级别 RAID组织好后,都是以CHUNK为读写单位 RAID-0 RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。 RAID0 将所在磁盘条带化后组成大容量的存储空间(如下图 所示),将数据分散存储在所有磁盘中

用户注册(一)之注册页面以及图形验证码

我怕爱的太早我们不能终老 提交于 2020-01-04 01:32:43
一、用户模型设计(用户表的设计)   1. 用户表字段分析     1)用户名     2)密码     3)手机号     4)邮箱     5)邮箱是否有效   2. 用户模型设计     django设计模型开发效率极高,内置了许多功能,包括权限验证等等,也有自定义的User模型。     因此我们需要继承已经写好的抽象模型类AbstractBaseUser,它有已经封装好的各种方法,约定俗成的凡是抽象模型类起名都以Abstract来开头,但是判断该模型类是否是抽象模型类的依据是,类中需要定义 class Meta: abstract = True     这才证明它是一个抽象模型类。               在我们继承了django自带的用户模型类之后,我们使用时进行扩充字段即可。   3. 在User这个app中的models.py页面来填写我们的需要的User模型类     1) 继承抽象模型类 ,添加用户新字段,重写管理器,方便我们创建用户,并制定我们的User模型使用我们自定义的管理器 # user/models.py 文件from django.db import models from django.contrib.auth.models import AbstractUser, UserManager as _UserManager # Create

django中间件 csrf auth认证

限于喜欢 提交于 2019-12-31 04:32:33
django中间件 能做全局访问频率限制,身份校验,黑名单,白名单 用法: 新建一个文件夹,文件夹新建一个py文件,文件中写如下代码 注意点:你写的类必须继续MiddlewareMixin from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse,render class MyMiddleWare(MiddlewareMixin): def process_request(self,request): print('我是第一个自定义的中间件中process_request方法') # return HttpResponse('我是第一个中间件里面返回的对象') # return render(request, 'index.html') # process_request方法默认不返回HttpResponse对象,如果返回了 # 后续的中间件都不会再走,而是直接同级别走process_response方法 def process_response(self,request,response): print('我是第一个自定义的中间件中process_response方法') return response django允许用户自定义中间件

SpringMvc数据校验@Valid等注解的使用与工具类抽取

不羁的心 提交于 2019-12-29 23:38:03
最近在重构老项目的代码,发现校验入参占用了很多代码,之前我对这一块的认识局限于使用StringUtils等工具来多个if块进行判断,代码是没什么问题,但是总写这些令人生烦,毕竟写代码也要讲究优雅的嘛,于是呢我就研究了一下JavaEE Api 上的校验类,基本上推翻了我之前对校验注解之类的认识,在这里记录一下所得。 @NotNull @NotBlank @NotEmpty 这三个注解的区别以及使用 @NotNull :校验入参不能为空,无法正确校检长度为0的字符串或以完全为空格的字符串 @NotBlank : 包含 @NotNull 的功能,可以校验字符串内容是否为空 @NotEmpty : 校验传入集合是否为空 当以上几个注解校验不被满足的时候,就会抛出异常,打印出默认的消息内容, 如 age not be null 这样的错误信息 想自定义错误信息可以如: @NotNull(message = "信息不能为空") 来定义 @Valid 的使用 如果入参为一个对象,想校验这个对象内容是否正确的时候,会用到1节中所讲的几个注解, 但是此时会有一个问题:如果不使用 @Valid 注解,1节中的注解在入参过程中是不生效的,只有保存的时候才会被校验(不排除PO和DTO是同一个对象的情况) 当然,这有一个大前提,就是没有其它对入参校验的方法执行。 *

单片机(5)

寵の児 提交于 2019-12-29 11:29:57
计算机通信   随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。   在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。   计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。   并行通信通常是将数据字节的各位用多条数据线同时进行传送 。      并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。   串行通信是将数据字节分成一位一位的形式在 一条传输线上逐个地传送。      串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。 串行通信的基本概念   一、异步通信与同步通信     1、异步通信       异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。              异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系

Java Bean Validation(参数校验) 最佳实践

倖福魔咒の 提交于 2019-12-29 00:25:13
37. Validation The method validation feature supported by Bean Validation 1.1 is automatically enabled as long as a JSR-303 implementation (such as Hibernate validator) is on the classpath. This lets bean methods be annotated with javax.validation constraints on their parameters and/or on their return value. Target classes with such annotated methods need to be annotated with the @Validated annotation at the type level for their methods to be searched for inline constraint annotations. For instance, the following service triggers the validation of the first argument, making sure its size is